CImage如何加载存放在内存中的位图信息

golliwog 2012-01-08 04:09:46
我的应用场景是这样的。
我有些位图,存入数据库中(将原始的文件读出)。在需要的时候从数据库中读出位图数据(这些数据就是原始的位图文件的数据)。

我的意识是,从位图文件直接读出的数据,直接放入内存中,并依据该块建立IStream。然后由CImage加载。

但是,CImage加载IStream时,便出错了。我想会不会是,位图文件的数据存放形式,与内存不一样。从而导致CImage加载时无法解析正确的位图格式。

下面是我的实现,我不了解图形、图像方面的编程,请大家指教。

unsigned char* p; // 位图数据
int len; // 位图数据长度

// 这里申请一块内存用
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, len);
void * pData = GlobalLock(hGlobal);
memcpy(pData, p, len); // 拷贝位图数据进去
GlobalUnlock(hGlobal);

// 创建IStream
IStream * pStream = NULL;
if (CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) != S_OK)
return NULL;

if ( !pStream )
return NULL;

// 使用CImage加载位图内存
CImage img;
if ( SUCCEEDED( img.Load( pStream ) ) ) // 这里出错,不知道为啥。
{
pStream -> Release();
return CBitmap::FromHandle( img );
}
else
{
pStream -> Release();
return NULL;
}




...全文
553 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
aliwawaww 2014-09-10
  • 打赏
  • 举报
回复
BMP图片的话内存里只能保存位图的像素信息。头要去掉。然后Cimage类load内存前 要把头信息加到内存里,具体bmp头信息可以百度下。然后再load DRAW OK的 我就用过
u010372420 2014-08-30
  • 打赏
  • 举报
回复
我也遇到了这问题,求解
向立天 2012-02-15
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
  • 打赏
  • 举报
回复
http://blog.sina.com.cn/s/blog_5f432e6a0100uaet.html

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧