CImage图像得到BYTE数组数据 - 8bit灰度图像
来源:互联网 发布:js 转动效果 编辑:程序博客网 时间:2024/05/21 19:50
为了上一篇博文(《将图像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); }
在这段代码中,重点就是最后一个循环,这才是将图片数据正序放置在新开辟的内存空间中的实现。(此处只是8bit的灰度图像的实现,如果需要3个通道的彩色图像的实现的话,这篇文章中有实现,但是我并没有实际测试Create CImage from Byte array - StackOverflow)
实际上就是一个DIB存放的图像数据的顺序的问题,在文件保存中,可能会是从上向下保存的图像数据,也有可能是反着的(只针对图像数据区域,也就是上图中的黄色区域),所以这个时候就需要得到这个信息
这个函数的返回值,解释的很清楚了,如果返回负值,就是一个从下往上排列的DIB。这样一来,数据首也就在左下角了(参见黄色区域)。当然,如果返回正值,也就是一个从上向下的存储方式了。并且返回的值的绝对值是每一行所占的字节数。
这样一来,上面的代码实现就出来了,也就能够获得正序的buffer供其它功能使用。
附上GetBits()的函数说明:
0 0
- CImage图像得到BYTE数组数据 - 8bit灰度图像
- C#中将byte数组转换为8bit灰度图像
- C#中将byte数组转换为8bit灰度图像
- CImage读取8位灰度图像数据
- 16bit灰度图像映射到8bit显示
- 24bit彩色图像转8bit灰度图
- 16bit灰度图像映射到8bit显示
- 16bit灰度图像映射到8bit显示
- 使用CImage类将RGB图像转化为灰度图像
- CImage类的介绍与使用 【图像打开,另存为,转为灰度图像(利用cimage方法实现)】
- java:图像(BufferedImage)色彩空间转换(灰度)暨获取图像矩阵数据byte[](sRGB/gray)
- 8bit、12bit、16bit图像数据
- 12bit灰度图像映射到8bit显示及python 实现
- C# 中 将 byte数组数据转变成图像
- 灰度图像
- 灰度图像
- 灰度图像
- 一个文件夹中既有rgb图像也有灰度图像,如何将文件夹图像数据生成一个数组data?
- HDU - 1085 Holding Bin-Laden Captive!(硬币问题)
- OJ 1088 滑雪__动态规划
- Spring概述
- Pull方法解析XML
- CentOS安装jdk的三种方法
- CImage图像得到BYTE数组数据 - 8bit灰度图像
- Spring基础
- oracle高效sql
- SVPProgressHUD 与 MBProgressHUD
- UVA - 10763 Foreign Exchange
- 天猫双11爬虫(福利:212万条商品数据免费下载)
- 加班,加班,加班。。。。。
- 【Unity】Kinect获取预制的手势信息
- 数据库事务