版权声明:本文为博主原创文章,欢迎转载,转载请贴上博客地址 http://blog.csdn.net/xdg_blog https://blog.csdn.net/xdg_blog/article/details/53180973
为了上一篇博文(《将图像BYTE(unsigned char)数组转换为VARIANT类型》)中得到CImage对象的数据的需求,也是找了各种资料。原来想使用CBitmap类来实现,虽然它只支持 .bmp格式的图片,但是我也只需要支持这个格式 = =。所以它的缺陷对我来说并不存在,但是最终还是没能够成功得到bits,所以就转投了CImage的怀抱,因为它有这个接口啊!(CImage Class - MSDN)
但是这也不是可以直接得到就使用的,这还涉及到一些DIB(Device-Independent Bitmaps)方面的知识,我并不是很了解它们,但是这也不影响使用,闲暇时间可以仔细了解它们的区别(DDB / DIB),在《Windows程序设计(第5版)》中也有两章就是介绍设备相关位图和设备无关位图的,有兴趣也可以去翻阅。
这是一张BMP文件格式图,现在要获得的就是黄色区域的数据,还是英语比较直接(Image Data PixelArray),中文还要斟酌半天叫它什么。
先上基本的实现代码:
///打开图片
CImage img;
img.Load(csName);
///获得图像数据
int pitch = img.GetPitch();
int bytes = abs(pitch) * img.GetHeight();
BYTE * src = (BYTE*)img.GetBits();
BYTE* tempBuffer = new BYTE[bytes];
int sizeLine = abs(pitch);
for ( int line = 0; line < img.GetHeight(); ++line ){
memcpy(tempBuffer + line * sizeLine, src + line * pitch, sizeLine);
}