通过以下代码我可以把png图片显示在picture control里了,但是有个问题就是颜色看起来不正确,是不是图片有所损失,请问下有没有方法可以解决呢,谢谢
CStatic *pwnd = (CStatic*)GetDlgItem(IDC_PIC);
CImage image;
image.load("png.png");
HBITMAP hBmp = image.Detach();
pwnd -> SetBitmap(hBmp);
代码我手敲的,如有错误请不要奇怪,谢谢
CStatic *pwnd = (CStatic*)GetDlgItem(IDC_PIC);
CImage image;
image.load("png.png");
HBITMAP hBmp = image.Detach();
pwnd -> SetBitmap(hBmp);
代码我手敲的,如有错误请不要奇怪,谢谢
解决方案 »
- 问个关于窗口附加控件的问题
- 请教高手,如何在静态文本框里显示电子地图
- 关于对话框的网页处理
- 请问2008的问题怎么解决
- cannot compile the file'C\*****';no compile tool is associated with the file extension."
- 谁有vc++扩展编程的源代码?
- 小女子求程序,,各位大虾,手下留程序啊!
- 急:高分求购实现浏览器功能的VC源代码.
- 对一个按钮,默认时只处理BN_CLICK和BN_DBCLICK,如果要处理其它消息,该怎么办?
- 如何在网页里面动态插入ActiveX控件?
- vc如何将datagrid中的数据导入excel中
- 组合框 ShowDropDown 之后,鼠标消失
你可以试试通过GDI+来显示
HRSRC hRsrc = ::FindResource (hInst,
MAKEINTRESOURCE(PNG图片ID),
_T("PNG")); // type
if (!hRsrc)
return ;
// load resource into memory
DWORD len = SizeofResource(hInst, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
if (!lpRsrc)
return ;
// Allocate global memory on which to create stream
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
memcpy(pmem,lpRsrc,len);
IStream* pstm;
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
// load from stream这是关键一句,通过FromStream返回以各Image*,然后在Graphic的DrawImage地方调用就行了!
Image *pImg = NULL ;
pImg=Gdiplus::Image::FromStream(pstm);
// free/release stuff
GlobalUnlock(m_hMem);
pstm-> Release();
FreeResource(lpRsrc);
Graphics graphics( GetDC()->m_hDC );
graphics.DrawImage(pImg, Rect(0, 100, pImg->GetWidth(), pImg->GetHeight()),
0, 0, pImg->GetWidth(), pImg->GetHeight(), UnitPixel);//, &imageAtt);