请教大侠:如何把位图文件头和获取的像素数据关联在一起?

guyucowboy 2010-03-18 04:39:05
请教大家:
我定义一个LPBITMAPINFOHEADER 类型的指针m_lpBMIH,分配空间并初始化如:
m_lpBMIH->biSize=sizeof(BITMAPINFOHEADER);
m_lpBMIH->biPlanes=1;

我能得到一个包含位图数据信息的指针pbmpbuffer,它所指向的另一片区域其中包含了像素数据。

如何能把像素数据取出来和m_lpBMIH关联?或者说如何把pbmpbuffer指向的像素数据赋值到m_lpBMIH对应的位图中?即把文件头和像素数据放在一起。
谢谢大家!
...全文
69 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
guyucowboy 2010-03-19
  • 打赏
  • 举报
回复
谢谢kier2回复!这回清楚了!
kier2 2010-03-18
  • 打赏
  • 举报
回复
再说第一个问题
BMP图像的格式为:
BMP文件由4部分组成:位图文件头(bitmap-file header)

位图信息头(bitmap-information header)

颜色表(color table)

颜色点阵数据(bits data)
其中,如果是32位的图像的话,就不用颜色表。你可以看出位图信息头跟像素数据没多大的关系,信息头只是包含一些图像的长,宽,图像位数等内容,它并不会保存图像像素的地址,所以,你可以根据pbmpbuffer指向的图像,给m_lpBMIH指向的信息头里对应的长,宽等信息赋值,有了位图信息图,接着是颜色表,(如果32位的话,可以不用),再就是像素数据了,你不用把pbmpbuffer指向的像素数据赋值到m_lpBMIH对应的位图中,
就像你问的StretchDIBits函数一样,这个函数里的CONST BITMAPINFO *lpBitsInfo你就填lpBMIH,CONST VOID *lpBits你就填pbmpbuffer,这样就可以显示了。
同样,如果你要保存图像的话,那就先吧BITMAPINFO 写进去,再把pbmpbuffer对应的像素值写进去就行了。

简单一句话,BITMAPINFO 只包含图像的一些尺寸,位数等信息。它没有必要在内存上跟像素数据放在一起。
guyucowboy 2010-03-18
  • 打赏
  • 举报
回复
谢谢!如何能把*lpBits和*lpBitsInfo相关联起来?谢谢大家!
kier2 2010-03-18
  • 打赏
  • 举报
回复
先回答第二个问题:
StretchDIBits中的CONST VOID *lpBits是指位图中的像素数据
VC_ZSY 2010-03-18
  • 打赏
  • 举报
回复
还没人回答啊··帮你顶一个
guyucowboy 2010-03-18
  • 打赏
  • 举报
回复
我想问一下:在函数
int StretchDIBits(
HDC hdc, // handle to DC
int XDest, // x-coord of destination upper-left corner
int YDest, // y-coord of destination upper-left corner
int nDestWidth, // width of destination rectangle
int nDestHeight, // height of destination rectangle
int XSrc, // x-coord of source upper-left corner
int YSrc, // y-coord of source upper-left corner
int nSrcWidth, // width of source rectangle
int nSrcHeight, // height of source rectangle
CONST VOID *lpBits, // bitmap bits
CONST BITMAPINFO *lpBitsInfo, // bitmap data
UINT iUsage, // usage options
DWORD dwRop // raster operation code
);

CONST VOID *lpBits,指的是整个位图的数据,还是位图中的像素数据?
我不用这个函数,如何能把*lpBits和*lpBitsInfo相关联起来?想让它们对应一幅位图。
谢谢大家!

guyucowboy 2010-03-18
  • 打赏
  • 举报
回复
自己顶一下!希望大家帮帮我!

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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