GDI+ 中 bitmap 转换 成 BYTE* 的问题

uni_colour2 2012-02-10 10:53:19
IStream *buffer;
::CreateStreamOnHGlobal(NULL, TRUE, &buffer);
CLSID m_bmpClsid;
GetEncoderClsid(L"image/bmp", &m_bmpClsid);
bitmap->Save(buffer,&m_bmpClsid,NULL);
BYTE *m_szBuff = new BYTE[LINEBYTE(w,24)*h];
LARGE_INTEGER li = {0};
buffer->Seek(li, STREAM_SEEK_SET, NULL);
ULONG m_nRead;

buffer->Read(m_szBuff,LINEBYTE(w,24)*h, &m_nRead);
memcpy(src,m_szBuff,LINEBYTE(w,24)*h);
delete[] m_szBuff;
buffer->Release();
说明:bitmap 是Bitmap类型,w,h是图片宽高,LINEBYTE是宏
src 是CxImage 调用 GetBits()的到的内存
bitmap 直接保存到磁盘显示的图片正确
转换成内存,再有CxImage保存,图片出现的错位

请大家帮忙,多谢
...全文
200 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
青花瓷 2012-02-14
  • 打赏
  • 举报
回复
BMP中也分为BMP1,BMP4,BMP8,BMP16,BMP24,BMP32等许多种格式,最常用的是BMP8和BMP24,你要搞清楚了到底是那种BMP格式,才可以进行byte方式的读写操作。
uni_colour2 2012-02-10
  • 打赏
  • 举报
回复
是不是 seek 的问题?
mlinlin 2012-02-10
  • 打赏
  • 举报
回复
可能是地址取向有问题,图像的颜色,数据读取方面没弄正确,之前我也有类似的现象,图像错位了,就是这个问题,你查查图像头啊,颜色,数据地址对不对

19,467

社区成员

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

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