
没有什么不同。
读出 BITMAPINFO 结构:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
以后,
BITMAPINFOHEADER 结构 里就有 biBitCount
biBitCount 等于 16 就是16位,等于24 就是24位,等于32 就是32位。
颜色在哪,要考虑 biCompression 压缩方法,若等于 BI_RGB, bmiColors 就等于 NULL 在 bitmap 数组里 每个WORD 就是 一个像素点 5个 bits 兰,5个 bits 绿,再5个 bits 红,最高位不用。
其它方法自己看资料吧。
CImage m_image;//m_image就是要处理的图像
int bit=m_ImageGetBPP();//获取每点像素的位数(8,24,32等),如果只处理24位图,则bit可直接赋值为24
int width=m_ImageGetWidth();//图像的宽度(单位为像素)
int height=m_ImageGetHeight();//图像的长度(单位为像素)
HBITMAP bitmap = m_ImageDetach();//
CBitmap b_Image=CBitmap::FromHandle(bitmap);//获取CBitmap类的实例
DWORD totalbytes=widthheightbit/8;//要保存像素数据需要的总的字节数,24位图的话,每个像素需要3个字节
byte lpBits=new byte[totalbytes];//字节型数组,每个单位存一个字节的数据
int bytes=b_Image->GetBitmapBits(totalbytes,lpBits);//把像素数据存到数组lpBits里,通过看bytes是否为0可以知道是否成功,为0则没有成功
//接下来遍历数组即可获取像素数据,因为24位图是3个字节构成一个像素,所以遍历时要注意间隔。
在列表控件中显示的图像都是图标,所以你要获取每一个位图的略缩图标,这样你就可以把他显示在列表控件中。如何在列表控件中显示图标,网上有很多资料;至于如何获取位图略缩图标,网上也有很多这样的例子。
以上就是关于用C语言读取16位bmp图片的每个像素的信息~全部的内容,包括:用C语言读取16位bmp图片的每个像素的信息~、用C或C++怎样提取出bmp图像的像素点信息值用LSB算法做信息隐藏,位图是24位的。、如何将bmp图像数据还原为图片并在listcontrol中显示 mfc等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)