日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC6中使用内存DC加载并显示JPG图片的注意事项

發布時間:2023/12/9 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC6中使用内存DC加载并显示JPG图片的注意事项 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

From: http://blog.csdn.net/boythl/article/details/3137446

今天在VC6中顯示JPG圖片,采用了內存DC緩存的方法刷新,但死活刷不出來,查了一下午才明白(沒辦法,很少用GDI,我小菜一個:( ):使用IPicture::Render函數向DC上貼圖時,若DC是一個內存DC,一定要先SelectObject一個CBitmap,內存DC沒有Bitmap是畫不出來的!??

? 另外,IPicture是COM庫,需要注意初始化COM,

??CMYApp::InitInstance() 里使用 CoInitialize(NULL);

? CMYApp::ExitInstance() 里使用 CoUninitialize();

?

?? 下面貼出顯示JPG圖片到DC的函數,來自網上,自己整理了下,據說還可顯示GIF圖片的第一禎圖片,我未用到。

  • /*************************************************
  • Function????:?ShowJPG
  • Description?:?在DC上按圖片原始尺寸顯示JPG圖片
  • Calls???????:?
  • Called?By???:?
  • Parameter???:?[CDC*?pDC]?---?DC
  • ????????????:?[CString?strPath]?---?要顯示的圖片路徑,建議全路徑
  • ????????????:?[int?x]?---?DC上顯示的X位置?
  • ????????????:?[int?y]?---?DC上顯示的Y位置
  • ????????????:?[bool?OriginalSize]?---?是否按圖片原始尺寸顯示,false時將按DC大小縮放
  • Return??????:?bool?---?是否成功
  • Author??????:?Unknown
  • Date????????:?2008-10-24
  • Modify??????:?
  • *************************************************/
  • bool?ShowJPG(CDC*?pDC,CString?strPath,?int?x,?int?y,?bool?OriginalSize)
  • {????
  • ????IStream?*pStm;?
  • ????CFileStatus?fstatus;
  • ????CFile?file;
  • ????LONG?cb;?
  • ????
  • ????//打開文件并檢測文件的有效性???
  • ????if?(file.Open(strPath,?CFile::modeRead)?&&?
  • ????????file.GetStatus(strPath,fstatus)?&
  • ????????((cb?=?fstatus.m_size)?!=?-1))?????
  • ????{????????
  • ????????HGLOBAL?hGlobal?=?GlobalAlloc(GMEM_MOVEABLE,?cb);????????
  • ????????LPVOID?pvData?=?NULL;?????????
  • ????????if?(hGlobal?!=?NULL)????????
  • ????????{????????????
  • ????????????pvData?=?GlobalLock(hGlobal);????????????
  • ????????????if?(pvData?!=?NULL)???????????
  • ????????????{???????????????
  • ????????????????file.ReadHuge(pvData,?cb);??????
  • ????????????????GlobalUnlock(hGlobal);???????????
  • ????????????????CreateStreamOnHGlobal(hGlobal,?TRUE,?&pStm);?????
  • ????????????}?????
  • ????????}?
  • ????}????
  • ????else???
  • ????{???????
  • ????????return?false;??
  • ????}
  • ????//打開文件結束???
  • ????
  • ????//顯示JPEG圖片?
  • ????IPicture?*pPic;????
  • ????
  • ????//load?image?from?file?stream???
  • ????if(SUCCEEDED(OleLoadPicture(pStm,?fstatus.m_size,?TRUE,IID_IPicture,?(LPVOID*)&pPic)))???
  • ????{????
  • ????????if?(OriginalSize)?//圖片原始大小顯示
  • ????????{
  • ????????????long?nWidth?=?0,?nHeight?=?0;?//?寬高,MM_HIMETRIC?模式,單位是0.01毫米?
  • ????????????pPic->get_Width(?&nWidth?);?//?寬?
  • ????????????pPic->get_Height(?&nHeight?);?//?高?
  • ????????????
  • ????????????CSize?sz(?nWidth,?nHeight?);?
  • ????????????pDC->HIMETRICtoDP(?&sz?);?//?轉換?MM_HIMETRIC?模式單位為?MM_TEXT?像素單位?
  • ????????????pPic->Render(pDC->m_hDC,?0,?0,?sz.cx,?sz.cy,?
  • ????????????????0,?nHeight,?nWidth,?-nHeight,?NULL);?
  • ????????}???
  • ????????else
  • ????????{
  • ????????????OLE_XSIZE_HIMETRIC?hmWidth;??????
  • ????????????OLE_YSIZE_HIMETRIC?hmHeight;????
  • ????????????pPic->get_Width(&hmWidth);
  • ????????????pPic->get_Height(&hmHeight);???
  • ????????????
  • ????????????//get?image?height?and?width??
  • ????????????double?fX,fY;
  • ????????????fX?=?(double)pDC->GetDeviceCaps(HORZRES)??*?(double)hmWidth?/
  • ????????????????((double)pDC->GetDeviceCaps(HORZSIZE)?*?100.0);?
  • ????????????fY?=?(double)pDC->GetDeviceCaps(VERTRES)??*?(double)hmHeight?/
  • ????????????????((double)pDC->GetDeviceCaps(VERTSIZE)?*?100.0);??
  • ????????????
  • ????????????//use?render?function?display?image????
  • ????????????//按圖片原始大小顯示
  • ????????????if(FAILED(pPic->Render(*pDC,x,y,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))?????????
  • ????????????{
  • ????????????????pPic->Release();??
  • ????????????????return?false;????????
  • ????????????}
  • ????????}???????
  • ????????
  • ????????if?(?pStm?)?pStm->Release();?//?釋放?IStream?指針
  • ????????if?(?pPic?)?pPic->Release();?//?釋放?IPicture?指針??
  • ????}???
  • ????else????
  • ????{??????
  • ????????return?false;???
  • ????}????
  • ????
  • ????return?true;
  • }
  • ?? 感謝vane小弟的幫助!及一個blog: http://topameng.spaces.live.com/blog/cns!f962d4854a8233d!248.entry ===================================

    非注明轉載的文章和blog在未特殊聲明情況下一般為本人原創或整理,
    原創文章版權歸沙漠孤狐(lonefox)所有;轉載文章版權歸原作者所有;

    http://blog.csdn.net/boythl

    歡迎轉載,但請注明出處,保留作者和版權信息。

    ===================================


    總結

    以上是生活随笔為你收集整理的VC6中使用内存DC加载并显示JPG图片的注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。