最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

VC++實現(xiàn)View內(nèi)容保存為圖片的方法

 更新時間:2016年08月09日 09:46:06   作者:RascallySnake  
這篇文章主要介紹了VC++實現(xiàn)View內(nèi)容保存為圖片的方法,涉及VC++中Bitmap類的save方法相關(guān)使用技巧,需要的朋友可以參考下

本文實例講述了VC++實現(xiàn)View內(nèi)容保存為圖片的方法。分享給大家供大家參考,具體如下:

我們在單文檔應(yīng)用程序中,經(jīng)常需要將View中的內(nèi)容保存為各種格式的圖片文件,以便打印。乍一看,可能不知道從哪里下手,其實主要就是用到Bitmap的save方法,如:

HDC hmemDC = ::CreateCompatibleDC( hdc );
HBITMAP hBmp = ::CreateCompatibleBitmap( hdc, destRect.Width(),destRect.Height() );
HANDLE hOld = ::SelectObject(hmemDC, hBmp);
Graphics graphic( hmemDC );
//下面進行各種文字、圖形、圖片的繪制 …………………………………………….
Bitmap bitmap(hBmp, NULL );
CLSID clsID;
//保存不同格式的(.jpg,bmp,png)的圖片需要不同的CLSID, imageFormat為用戶期望保存的圖片格式
if (_T("jpg") == imageFormat.MakeLower() )
{
   GetEncoderClsid(_T("image/jpeg"), &clsID);
}
else if ( _T("bmp") == imageFormat.MakeLower() )
{
   GetEncoderClsid(_T("image/bmp"), &clsID);
}
else if ( _T("png") == imageFormat.MakeLower() )
{
   GetEncoderClsid(_T("image/png"), &clsID);
}
//保存為圖片,strFN為圖片保存的路徑和文件名
bitmap.Save( strFN, &clsID, NULL );
::SelectObject( hmemDC, hOld );
::DeleteObject( hBmp );
::DeleteDC( hmemDC );

下面重要的就是獲取不同圖片格式的CLSID,看下面代碼:

Int GetEncoderClsid(const TCHAR* format, CLSID* pClsid)
{
  UINT num= 0;
  UINT size= 0;
  ImageCodecInfo* pImageCodecInfo= NULL;
  GetImageEncodersSize(&num, &size);
  if(size== 0)
  {
    return -1;
  }
  pImageCodecInfo= (ImageCodecInfo*)(malloc(size));
  if(pImageCodecInfo== NULL)
  {
    return -1;
  }
  GetImageEncoders(num, size, pImageCodecInfo);
  for(UINT j=0; j< num; ++j)
  {
    if(_tcscmp(pImageCodecInfo[j].MimeType, format)== 0)
    {
      *pClsid= pImageCodecInfo[j].Clsid;
      free(pImageCodecInfo);
      return j;
    }
  }
  free(pImageCodecInfo);
  return -1;
}

如果是直接打印View中的圖片,那么View的OnDraw函數(shù)給的pDC指的就是打印機的紙張的尺寸,我們無需做太多的處理,我們只需要將當期View的區(qū)域轉(zhuǎn)換到紙張的大小即可,如:

CRect rc;
GetClientRect( &rc );
Long width =0,height = 0;
if( pDC->IsPrinting)
{
  int  xLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSX);
  int  yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY);
  //得到設(shè)備坐標和邏輯坐標的比例
  long  xExt = (long)rc.width() * xLogPixPerInch/96;
  long  yExt = (long)rc.height() * yLogPixPerInch/96;
  width = xExt;
  height = yExt;
  //后面使用GDI+進行繪圖
  HBITMAP hBmp = ::CreateCompatibleBitmap( pDC->m_hDC, width, height );
  HANDLE hOld = ::SelectObject(hmemDC, hBmp);
  Graphics tmp_graff( hmemDC );
  …………………………………..
  //獲取紙張的大小,然后拉伸拷貝
  int iPageWidth = pDC->GetDeviceCaps(HORZRES);
  int iPageHeight = pDC->GetDeviceCaps(VERTRES);
  ::StretchBlt( pDC->m_hDC, 0, 0, iPageWidth, iPageHeight, hmemDC, 0, 0, width, height, SRCCOPY );  ::SelectObject( hmemDC, hOld );
  ::DeleteObject( hBmp );
  ::DeleteDC( hmemDC );
}

希望本文所述對大家VC++程序設(shè)計有所幫助。

相關(guān)文章

  • C語言strlen函數(shù)全方位講解

    C語言strlen函數(shù)全方位講解

    在C語言中我們要獲取字符串的長度,可以使用strlen函數(shù),strlen函數(shù)計算字符串的長度時,直到空結(jié)束字符,但不包括空結(jié)束字符,因為 strlen函數(shù)時不包含最后的結(jié)束字符的,因此一般使用strlen函數(shù)計算的字符串的長度會比使用sizeof計算的字符串的字節(jié)數(shù)要小
    2022-09-09
  • C語言獲取Shell返回結(jié)果的實現(xiàn)方法

    C語言獲取Shell返回結(jié)果的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狢語言獲取Shell返回結(jié)果的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • C語言利用EasyX繪制小企鵝表情包

    C語言利用EasyX繪制小企鵝表情包

    這篇文章主要為大家詳細介紹了C語言如何利用EasyX繪圖庫實現(xiàn)繪制可愛的小企鵝表情包,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-12-12
  • C++Primer筆記之關(guān)聯(lián)容器的使用詳解

    C++Primer筆記之關(guān)聯(lián)容器的使用詳解

    本篇文章對C++Primer 關(guān)聯(lián)容器的使用進行了詳細的分析介紹。需要的朋友參考下
    2013-05-05
  • C++ STL之list雙向鏈表容器方式

    C++ STL之list雙向鏈表容器方式

    這篇文章主要介紹了C++ STL之list雙向鏈表容器方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • C語言動態(tài)規(guī)劃點殺dp算法LeetCode炒股習(xí)題案例解析

    C語言動態(tài)規(guī)劃點殺dp算法LeetCode炒股習(xí)題案例解析

    這篇文章主要介紹為了C語言動態(tài)規(guī)劃點殺dp算法,本文以LeetCode炒股習(xí)題案例來為大家進行詳細解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-02-02
  • VisualStudio2010安裝教程

    VisualStudio2010安裝教程

    這篇文章通過圖文并茂的形式給大家介紹VisualStudio2010安裝教程,在日常開發(fā)中是必不可少的搭建過程,感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • C語言五子棋小游戲?qū)崿F(xiàn)代碼

    C語言五子棋小游戲?qū)崿F(xiàn)代碼

    這篇文章主要為大家詳細介紹了C語言五子棋小游戲?qū)崿F(xiàn)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C語言指針基礎(chǔ)詳解

    C語言指針基礎(chǔ)詳解

    這篇文章主要介紹了C語言指針的基礎(chǔ),主要對C語言中指針的本質(zhì)及常見用法做了較為通俗易懂的分析,是后續(xù)深入學(xué)習(xí)C語言的基礎(chǔ),需要的朋友可以參考下
    2021-10-10
  • Qt學(xué)習(xí)教程之表格控件螞蟻線詳解

    Qt學(xué)習(xí)教程之表格控件螞蟻線詳解

    如果有用過PS的選區(qū)工具應(yīng)該就會知道螞蟻線是什么東西了,就是用來表示選區(qū)的一種虛線,關(guān)鍵還是要動態(tài)的!下面這篇文章主要給大家介紹了關(guān)于Qt學(xué)習(xí)教程之表格控件螞蟻線的相關(guān)資料,需要的朋友可以參考下
    2018-07-07

最新評論

和田县| 台东县| 九江市| 乐至县| 酒泉市| 讷河市| 芷江| 灵寿县| 那曲县| 义马市| 通州市| 大宁县| 扶绥县| 开封县| 两当县| 怀化市| 新和县| 文山县| 南开区| 远安县| 巴塘县| 八宿县| 博野县| 桦甸市| 嘉定区| 靖宇县| 财经| 鸡泽县| 金寨县| 宁海县| 蛟河市| 榆社县| 包头市| 辽阳市| 临江市| 和田市| 屯昌县| 吴旗县| 盘锦市| 青铜峡市| 横山县|