在VC中我们可以直接利用LoadIcon, LoadBitmap或LoadImage来加载bmp和ico图片, 但是加载jpg和png等格式就没有这么方便了.  其实我们可以通过两个系统提供的两个com接口IPicture和IStream类实现类似于VB的Picture控件, 具体的用法请查看msdn或google下, 下面代码是我以前在网上找的一个例子, 主要用到了几个API函数: AfxGetResourceHandle, FindResource, SizeofResource, LoadResource, CreateStreamOnHGlobal, 如果需要保存为新的图片就需要用到IPicture接口了.

m_pImage = new CImage(); ImageFromIDResource(*m_pImage, IDB_PNG_IDISK, _T("PNG")); HBITMAP hBitmap = m_pImage->Detach(); m_statBitmap.SetBitmap(hBitmap); void ImageFromIDResource(CImage& image, UINT nID, LPCTSTR lpType) { HINSTANCE hInst = AfxGetResourceHandle(); HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),lpType); if(hRsrc == NULL) return; DWORD dwLen = SizeofResource(hInst, hRsrc); BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc); if (!lpRsrc) return;; HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, dwLen); BYTE* pmem = (BYTE*)GlobalLock(m_hMem); memcpy(pmem,lpRsrc,dwLen); IStream* pstm; CreateStreamOnHGlobal(m_hMem,FALSE,&pstm); image.Load(pstm); GlobalUnlock(m_hMem); pstm->Release(); FreeResource(lpRsrc); }

另外, 网上还有一个用IPicture写的Picture类, 源码如下:

// MSDN Magazine -- October 2001 // If this code works, it was written by Paul DiLascia. // If not, I don't know who wrote it. // Compiles with Visual C++ 6.0 for Windows 98 and probably Windows 2000 too. // Set tabsize = 3 in your editor. // #pragma once #include <atlbase.h> // // Picture object--encapsulates IPicture // class CPicture { public: CPicture(); ~CPicture(); // Load frm various sosurces BOOL Load(UINT nIDRes); BOOL Load(LPCTSTR pszPathName); BOOL Load(CFile& file); BOOL Load(CArchive& ar); BOOL Load(IStream* pstm); // render to device context BOOL Render(CDC* pDC, CRect rc=CRect(0,0,0,0), LPCRECT prcMFBounds=NULL) const; CSize GetImageSize(CDC* pDC=NULL) const; operator IPicture*() { return m_spIPicture; } void GetHIMETRICSize(OLE_XSIZE_HIMETRIC& cx, OLE_YSIZE_HIMETRIC& cy) const { cx = cy = 0; const_cast<CPicture*>(this)->m_hr = m_spIPicture->get_Width(&cx); ASSERT(SUCCEEDED(m_hr)); const_cast<CPicture*>(this)->m_hr = m_spIPicture->get_Height(&cy); ASSERT(SUCCEEDED(m_hr)); } void Free() { if (m_spIPicture) { m_spIPicture.Release(); } } protected: CComQIPtr<IPicture>m_spIPicture; // ATL smart pointer to IPicture HRESULT m_hr; // last error code }; #include "StdAfx.h" #include "Picture.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // CPicture implementation // CPicture::CPicture() { } CPicture::~CPicture() { } // // Load from resource. Looks for "IMAGE" type. // BOOL CPicture::Load(UINT nIDRes) { // find resource in resource file HINSTANCE hInst = AfxGetResourceHandle(); HRSRC hRsrc = ::FindResource(hInst, MAKEINTRESOURCE(nIDRes), "IMAGE"); // type if (!hRsrc) return FALSE; // load resource into memory DWORD len = SizeofResource(hInst, hRsrc); BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc); if (!lpRsrc) return FALSE; // create memory file and load it CMemFile file(lpRsrc, len); BOOL bRet = Load(file); FreeResource(hRsrc); return bRet; } // // Load from path name. // BOOL CPicture::Load(LPCTSTR pszPathName) { CFile file; if (!file.Open(pszPathName, CFile::modeRead|CFile::shareDenyWrite)) return FALSE; BOOL bRet = Load(file); file.Close(); return bRet; } // // Load from CFile // BOOL CPicture::Load(CFile& file) { CArchive ar(&file, CArchive::load | CArchive::bNoFlushOnDelete); return Load(ar); } // // Load from archive--create stream and load from stream. // BOOL CPicture::Load(CArchive& ar) { CArchiveStream arcstream(&ar); return Load((IStream*)&arcstream); } // // Load from stream (IStream). This is the one that really does it: call // OleLoadPicture to do the work. // BOOL CPicture::Load(IStream* pstm) { Free(); HRESULT hr = OleLoadPicture(pstm, 0, FALSE, IID_IPicture, (void**)&m_spIPicture); ASSERT(SUCCEEDED(hr) && m_spIPicture); return TRUE; } // // Render to device context. Covert to HIMETRIC for IPicture. // BOOL CPicture::Render(CDC* pDC, CRect rc, LPCRECT prcMFBounds) const { ASSERT(pDC); if (rc.IsRectNull()) { CSize sz = GetImageSize(pDC); rc.right = sz.cx; rc.bottom = sz.cy; } long hmWidth,hmHeight; // HIMETRIC units GetHIMETRICSize(hmWidth, hmHeight); m_spIPicture->Render(*pDC, rc.left, rc.top, rc.Width(), rc.Height(), 0, hmHeight, hmWidth, -hmHeight, prcMFBounds); return TRUE; } // // Get image size in pixels. Converts from HIMETRIC to device coords. // CSize CPicture::GetImageSize(CDC* pDC) const { if (!m_spIPicture) return CSize(0,0); LONG hmWidth, hmHeight; // HIMETRIC units m_spIPicture->get_Width(&hmWidth); m_spIPicture->get_Height(&hmHeight); CSize sz(hmWidth,hmHeight); if (pDC==NULL) { CWindowDC dc(NULL); dc.HIMETRICtoDP(&sz); // convert to pixels } else { pDC->HIMETRICtoDP(&sz); } return sz; }

VC加载jpeg, png图片的方法相关推荐

  1. VC下加载多种格式图片的方法总结

    From: http://www.cnblogs.com/Daywei/archive/2011/03/19/1988848.html 尽管VC有提供相应的API和类来操作bmp位图.图标和(增强)元 ...

  2. vc++加载透明png图片方法——GDI+和CImage两种

    转载:http://blog.csdn.net/zhongbin104/article/details/8730935 先看看GDI+的方法 方法1: 1.GDI+画透明图层(alpha)的png图片 ...

  3. MFC 加载gif动态图片的方法

    在一个项目中需要加入GIF动画.一个版本时通过IE浏览器显示网页的形式,js脚本.CSS他人编写较繁琐:另一个VC项目需要使用MFC直接加载GIF动画.加载GIF动画网上有多种方式,大多数是将GIF填 ...

  4. MFC加载gif动态图片的方法

    在一个项目中需要加入GIF动画.一个版本时通过IE浏览器显示网页的形式,js脚本.CSS他人编写较繁琐:另一个VC项目需要使用MFC直接加载GIF动画.加载GIF动画网上有多种方式,大多数是将GIF填 ...

  5. MFC 的 Picture Control 加载 BMP/PNG 图片的方法

    1. 加载 BMP CStatic* pWnd = (CStatic*)GetDlgItem(IDC_PIC); // 得到 Picture Control 句柄 pWnd->ModifySty ...

  6. android全平台编译libjpeg-turbo并基于ANativeWindow加载JPEG图片

    图形图像实践 android全平台编译libjpeg-turbo并基于ANativeWindow加载JPEG图片 android全平台编译libpng并基于ANativeWindow加载PNG图片 概 ...

  7. 图片太大,导致页面加载过慢的处理方法

    整合博客:https://blog.csdn.net/wsyzxss/article/details/73480436  与 http://yujiangshui.com/three-html5-fe ...

  8. ajax的loading方法,Ajax加载中显示loading的方法

    使用ajaxStart方法定义一个全局的"加载中..."提示$(function(){ $("#loading").ajaxStart(function(){ ...

  9. python制作图片数据集_Pytorch自己加载单通道图片用作数据集训练的实例

    pytorch 在torchvision包里面有很多的的打包好的数据集,例如minist,Imagenet-12,CIFAR10 和CIFAR100.在torchvision的dataset包里面,用 ...

最新文章

  1. Understanding Extension Class Loading--官方
  2. 小米平板2更新bios版本_【军团战争5.25】新版本更新预告第一弹,2级兵3次升级!...
  3. IOS 开发环境,证书和授权文件等详解
  4. SAP Spartacus Delivery Mode Component单元测试的Mock设计图
  5. 1014 福尔摩斯的约会 (20分)
  6. axi时序图_深入 AXI4总线(E3)实战:制作一个 AXI 接口 IP
  7. 想要有设计有格调|这波PSD时尚渐变创意海报模板,没跑
  8. The path C:\Oracle\Middleware\wlserver_10.3 contains the wrong version of WebLogic Server. Expect
  9. python计算组合数_python排列组合算法
  10. CSS去除链接虚线(兼容IE6、IE7)
  11. 思科单臂路由最详细教程
  12. 家用计算机时间,电脑时间校准方法,怎么校准电脑时间
  13. 利用集成支持向量机模型评估信贷风险
  14. 关于利用rundll32执行程序的分析
  15. 天下武功唯快不破,实时分析让企业决策又快又准
  16. html+canvas 星空背景案例
  17. opencv-python中 boundingRect(cnt)以及cv2.rectangle用法
  18. git ssh 登陆失败: no matching host key type found. Their offer: ssh-dss 解决办法
  19. pathlib库使用手册
  20. 所学所感,贵在坚持。

热门文章

  1. Stm32f407zgt6 143引脚PDR_ON 的注意事项
  2. 此计算机必须为委派而被信任_允许受信任的用户进行委派
  3. 【JS】网页悬浮广告及联系QQ客服侧边栏
  4. Shopee通知:未通过实名认证将导致订单无法正常出运
  5. Win10蓝牙开关消失解决方法
  6. HTTP协议压缩格式和URL编码介绍
  7. 2月15日市场游资操作情况以及龙虎榜
  8. 学着搭建流媒体服务器
  9. android适配器报空指针错误,适配器总是出现空指针问题
  10. css3空中飘浮的气球动画