8
A
回答
23
CImage image;
image.Load(_T("C:\\image.png")); // just change extension to load jpg
CBitmap bitmap;
bitmap.Attach(image.Detach());
7
您可以使用支持以下格式的CImage類:JPEG,GIF,BMP和PNG。
http://msdn.microsoft.com/en-us/library/bwea7by5%28VS.80%29.aspx
使用負載功能,從磁盤加載文件:
http://msdn.microsoft.com/en-us/library/tf4bytf8%28VS.80%29.aspx
2
10
//----- load png into CImage from resource
bool Load(CImage * pimage, LPCTSTR lpszResourceName, HINSTANCE hinstRes)
{
if (hinstRes == NULL)
{
hinstRes = AfxFindResourceHandle(lpszResourceName, _T("PNG"));
}
HRSRC hRsrc = ::FindResource(hinstRes, lpszResourceName, _T("PNG"));
if (hRsrc == NULL)
{
return false;
}
HGLOBAL hGlobal = LoadResource(hinstRes, hRsrc);
if (hGlobal == NULL)
{
return false;
}
LPBYTE lpBuffer = (LPBYTE) ::LockResource(hGlobal);
if (lpBuffer == NULL)
{
FreeResource(hGlobal);
return false;
}
bool bRes = false;
{
UINT uiSize = ::SizeofResource(hinstRes, hRsrc);
HGLOBAL hRes = ::GlobalAlloc(GMEM_MOVEABLE, uiSize);
if (hRes != NULL)
{
IStream* pStream = NULL;
LPVOID lpResBuffer = ::GlobalLock(hRes);
ASSERT (lpResBuffer != NULL);
memcpy(lpResBuffer, lpBuffer, uiSize);
HRESULT hResult = ::CreateStreamOnHGlobal(hRes, TRUE, &pStream);
if(hResult == S_OK)
{
pimage->Load(pStream);
pStream->Release();
bRes= true;
}
}
}
UnlockResource(hGlobal);
FreeResource(hGlobal);
return bRes;
}
1
CString pngPath=L"D:\\k.png";
CImage pngImage;
CBitmap pngBmp;
CDC bmDC;
CBitmap *pOldbmp;
BITMAP bi;
//UINT xPos=450,yPos=300;
UINT xPos=10,yPos=10;
CClientDC dc(this);
pngImage.Load(pngPath);
// new code
pngBmp.Attach(pngImage.Detach());
bmDC.CreateCompatibleDC(&dc);
pOldbmp= bmDC.SelectObject(&pngBmp);
pngBmp.GetBitmap(&bi);
dc.BitBlt(xPos,yPos,bi.bmWidth,bi.bmHeight,&bmDC,0,0,SRCCOPY);
bmDC.SelectObject(pOldbmp);
0
有一個在MFC簡單CPngImage。它來源於CBitmap並允許將一個PNG作爲CBitmap載入。
AFAIK本課程自VS-2010開始提供。
3
對於PNG圖像是來自資源
CPngImage pngImage;
pngImage.Load(YOUR_RESOURCE_ID, AfxGetResourceHandle());
CBitmap bitmap;
bitmap.Attach(pngImage.Detach());
會讓你快樂。 bitmap
也可以添加到CImageList
。
+0
這是一個遺憾,這樣的位圖會丟失所有的alpha值,我在爲CDC做BitBlt時缺少透明度 – BlackBada 2016-07-22 15:59:24
相關問題
- 1. 使用MFC對話框加載圖像
- 2. MFC VC++:Picture Control無法加載PNG圖像
- 3. 如何使用MFC來從文件加載圖像
- 4. OpenCV:如何使用4個通道加載png圖像?
- 5. 大型JPEG/PNG圖像序列循環
- 6. 調整大小png/jpeg圖像
- 7. 微軟Office文件圖像(JPEG/PNG)
- 8. 圖像(PNG,JPEG)對DLL轉換器
- 9. RGB888(24位)PNG/JPEG圖像算法
- 10. 如何在Qt中使用QPainter.drawImage在jpeg/png圖片的背景圖片上繪製jpeg/png圖片?
- 11. 如何將我的php代碼(使用SyntaxHighlight)轉換爲圖像(如jpeg或png)
- 12. 從我的網站下載的Photoshop中打開JPEG/PNG圖像
- 13. 如何使用gzip_types圖像/ jpeg
- 14. Perl - 使用Perl將MSSQL圖像字符串轉換爲JPEG/PNG
- 15. 使用Java對圖像進行代碼轉換(JPEG轉PNG)
- 16. 使用libCurl和GdkPixBuff將圖像從JPEG保存爲PNG
- 17. 使用DirectX呈現BMP,JPEG或PNG圖像?
- 18. 使用GLX(opengl和Xlib)設置圖像(jpeg | png)背景
- 19. 如何從圖像(BMP/JPEG/PNG)創建DrawingBrush?
- 20. Boost :: GIL如何將圖像保存爲JPEG或PNG到char *?
- 21. 如何減少圖像JPEG的大小/ PNG
- 22. 如何將圖像(GIF,JPG,JPEG,PNG)轉換爲PHP中的TIFF?
- 23. 如何將圖像格式從jpeg轉換爲png使用gm作爲node.js
- 24. 使用的UIImagePickerController獲得的圖像 - 如何知道是否保存PNG或JPEG?
- 25. 如何使用我的C程序將PDF轉換爲圖像格式(jpeg,png,...)?
- 26. JPEG圖像使用PHP轉換PNG圖像時轉爲全黑色
- 27. 是否將ARGB_8888加載JPEG圖像時使用了alpha通道?
- 28. 無法使用BitmapFactory.decodeFile加載JPEG圖像。返回null
- 29. 將png轉換爲jpeg增加圖像大小
- 30. 如何使用GDI +顯示25%不透明度的PNG圖像? (MFC)
從文件加載png圖像比資源更容易 – 2013-10-10 03:40:47
如果你想確保文件存在,然後檢查image.Load()返回碼,否則你可能會(如我一樣)得到一個ASSERT。 – akame 2014-03-04 11:55:02
CPngImage類執行相同的操作。 (至少可用於VS-2010) – xMRi 2014-06-13 09:12:00