在VC中使用GDI+从自定义资源中加载图片
2015-04-30 10:46
519 查看
函数定义:BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR, Image * & 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=Gdiplus::Image::FromStream(pstm); // free/release stuff GlobalUnlock(m_hMem); pstm->Release(); FreeResource(lpRsrc); return TRUE; } 调用函数: ImageFromIDResource(IDR_BMP1, "bmp",(Image*&)img); 其中IDR_BMP1为自定义资源的ID,bmp为自定义资源类型 然后就可以调用GDI+绘图了: Graphics g(hdc); g.DrawImage(img,0,0,0,0,48,48,UnitPixel); 最后要释放资源: delete img; 默认Bitmap(RT_BITMAP)类型的图片无法加载, RT_BITMAP是预定义类型, 资源里面没有bmp文件的头, SizeofResource 的返回值要比图片文件少几个字节,因为少了这几个字节, 所以GDI+会返回invalid parameter错误。 |
相关文章推荐
- 在VC中使用GDI+从自定义资源中加载图片
- VC中使用GDI+实现为按钮加载Png图片
- VC中使用GDI+实现为按钮加载Png图片
- VC中使用GDI+实现为按钮加载Png图片
- VC中使用GDI+实现为按钮加载Png图片
- Android Bitmap大量使用不产生OOM之“加载大图片资源优化”
- GDI+从资源中的加载PNG图片
- 自定义编辑框VC,可加载更改字体,添加背景图片,显示输入提示信息
- vc++加载透明png图片方法——GDI+和CImage两种
- coco2d js 修改预加载,使用自定义图片
- 使用GDI+和CImage类加载png图片
- Android提高篇之自定义dialog实现processDialog“正在加载”效果、使用Animation实现图片旋转
- UI一揽子计划 21 (UICollectionView、SDWebImage第三方类库加载图片的使用、集合视图的布局UICollectionViewFlowLayout 、自定义Cell、布局协议
- 使用自定义的item、Adapter和AsyncTask、第三方开源框架PullToRefresh联合使用实现自定义的下拉列表(从网络加载图片显示在item中的ImageView)
- 使用自定义的item、Adapter和AsyncTask、第三方开源框架PullToRefresh联合使用实现自定义的下拉列表(从网络加载图片显示在item中的ImageView)
- vc++加载透明png图片方法——GDI+和CImage两种
- OGEngine 手游引擎教程:图片资源加载及工具使用
- OGEngine教程: 图片资源加载及工具使用
- vc++加载透明png图片方法——GDI+和CImage两种
- vc++加载透明png图片方法——GDI+和CImage两种