GDI+ Image通过资源ID构建对象
2015-09-24 10:24
295 查看
bool ImageFromIDResource(UINT nID, LPCTSTR sTR,Bitmap * &pImg) { HINSTANCE hInst = AfxGetResourceHandle(); HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR); // type if (!hRsrc) return FALSE; // load resource into memory DWORD len = SizeofResource(hInst, hRsrc); BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc); if (!lpRsrc) return FALSE; // 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 pImg=Bitmap::FromStream(pstm); // free/release stuff GlobalUnlock(m_hMem); pstm->Release(); FreeResource(lpRsrc); return 1; }
调用方式:
Image * pImage = NULL;
ImageFromIDResource(IDR_PNG_NO_PIC, L"png", pImage);
delete pImage;
/////////////////////////////////////////////////////////////////////////
Image * pImage = NULL;
ImageFromIDResource(IDR_PNG_NO_PIC, L"jpg", pImage);
delete pImage;
//////////////////////////////////////////////////////////////////////////
Image * pImage = NULL;
ImageFromIDResource(IDR_PNG_NO_PIC, L"bitmap", pImage);
delete pImage;
//////////////////////////////////////////////////////////////////////////
其中的 L"png", L"jpg", L"bitmap"为导入到vc资源的类别,并且不区分大小写。
个人建议使用GDI+的IMAGE加载PNG图片,而不是使用MFC的CIMAGE。
原因如下:1.透明部分需要额外处理。
2.拉伸图片可能出现问题
详情参考:http://www.07net01.com/program/469315.html
相关文章推荐
- 重温葫芦娃、、、、、、杂记
- android设置状态栏的颜色
- IO-Java文件操作大全
- Android解决Fragment中使用SurfaceView切换时闪一下黑屏的问题
- CListCtrl虚拟列表技术
- Java与Unicode
- 2路插入排序实现
- [LeetCode]Summary Ranges
- in-place数据交换
- activemq在windows下启动报错,闪退问题
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- [转] Transitions: Going from Shots to the Insulin Pump
- JAVA反射机制
- Zabbix WMI 监控
- 数据处理
- Spark1.4从HDFS读取文件运行Java语言WordCounts
- Spark1.4从HDFS读取文件运行Java语言WordCounts
- 头文件嵌套中出现的重复编译错误的解决办法
- iOS9适配http,微信、qq、支付宝添加白名单
- C程序员学bash shell容易掉坑的注意点(未完待续)