力为的博客
技术那些事。
posts - 89,comments - 434,trackbacks - 0

 

问题:已知一块内存,知道里面是一张图片的数据,如何显示出来?

一种解决方法:
CImage(MFC or ATL)提供了一个加载内存中Image的成员函数HRESULT CImage::Load(IStream* pStream)。如何把指定的内存转换为IStream接口就成了需要解决的问题。最后发现获取一个ISteam还真是曲折:):


 

void  LoadMemImage( void *  pMemData,  long  len)
{
  HGLOBAL hGlobal 
=  GlobalAlloc(GMEM_MOVEABLE, len);
  
void *  pData  =  GlobalLock(hGlobal);
  memcpy(pData, pMemData, len);
  GlobalUnlock(hGlobal);

  IStream
*  pStream  =  NULL;
  
if  (CreateStreamOnHGlobal(hGlobal, TRUE,  & pStream)  ==  S_OK)
  
{
   CImage image;
   
if (SUCCEEDED(image.Load(pStream)))
   
{
    
// ..

   }

   pStream
-> Release();     
  }

  GlobalFree(hGlobal);

}

posted on 2006-06-10 16:49 力为 阅读(3045) 评论(10)  编辑 收藏 引用 所属分类: COM&ATL&WTLVC&MFC

FeedBack:
# re: 用CImage加载内存里的Image
2006-06-10 19:36 | Jerry Cat
若是楼主自己"琢磨"出来的, 在下就佩服得紧! 小弟叫Jerry Cat, 也是在这儿安了家的, 愿与楼主这样的高手交往!  回复  更多评论
  
# re: 用CImage加载内存里的Image
2006-06-11 14:38 | 力为
to Jerry Cat:
俺称不上高手,呵呵。但很高兴能与大家一起交流:)  回复  更多评论
  
# re: 用CImage加载内存里的Image
2006-07-05 01:24 |
正在做毕业设计,得用从来没学过的c++,查相关资料看到这里,冒昧的留言想问个很菜鸟的问题:怎么读入图片啊?就是一个程序的开始,要先读入一张图片(格式是jpg或者gif),然后再处理。
先谢过了!  回复  更多评论
  
# re: 用CImage加载内存里的Image
2006-07-06 18:43 | mythma
用 CImage直接Load  回复  更多评论
  
# re: 用CImage加载内存里的Image
2007-03-08 16:19 | 凸-_-凸
低级  回复  更多评论
  
# re: 用CImage加载的Image
2008-04-12 15:38 | wind
CImage img;
img.load("sample.jpg");
这样有错吗?怎么每次都有错啊?是不是要把图片载入资源啊?  回复  更多评论
  
# re: 用CImage加载内存里的Image
2008-04-13 19:11 | 力为
不需要的。
路径有问题不?  回复  更多评论
  
# re: 用CImage加载内存里的Image
2008-09-24 16:08 | simon
有那么复杂么,简单的用个CREATE函数就可以了  回复  更多评论
  
# re: 用CImage加载内存里的Image
2008-09-25 19:03 | 初学vc
请问如何用CImage加载资料中已有的图片资料呢?  回复  更多评论
  
# re: 用CImage加载内存里的Image
2008-09-25 19:04 | 初学vc
请问如何用CImage加载资源中已有的图片资料呢?  回复  更多评论
  


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
.NET频道  博客园社区  闪存
网站导航: