怎么得到位图对象的数据域
如何得到位图对象的数据域
各位神人,位图这儿有几个地方不是清楚,
(1)位图的数据域中起始处存的是图片左下角的数据?从左往右,从下往上?二进制数据中是这样存的:文件头42 4d .. ..+文件信息头28 00 00 00...+左下角第一个像素点的值 .. .. ..直到右上角的值?(24位)
(2) m_bitmap.GetBitmap(&bm),对于同一幅图片,一幅是24位,一幅改为16位,得到的bm都是一样的,不明白这个bmWidthBytes这个参数会跟什么有关?根据调试的值来看,它的值都是 位图宽度*4,这个4是什么意思?还有它的bmBitsPixel这个参数得值都是32,看书上说这个参数的意思是 每点的位数?那应该是24位的值就是24,16位的就是两个字节16?不知道是不理解错了?
(3)GetBitmapBits这个函数得到的是整个位图文件的二进制数据:文件头+信息头+数据域?而不只是颜色数据?还有一点不明白它获得的顺序是什么样的,在网上找的一段代码中它获得pData后,显示前还转换了下顺序.这是他的地址:http://blog.****.net/wayright/article/details/6591362,
(4)如果GetBitmapBits中返回的pData不是数据域的起始位置,那我应该怎么移动这个指针,移多大呢?觉得是(14+40)*8?
(5)如果前景图片是32位的,背景图片是24位,做透明处理,会不会产生错位?
------解决方案--------------------
1、我记得应该是左上到右下
2、CBitmap是设备相关的,不管你的文件是什么样,读近来之后体现的都是当前设备的信息
3、GetBitmapBits是裸数据的信息,不包括文件头
4、不会
------解决方案--------------------
bmWidthBytes 跟 biBitCount有关.
当biBitCount(每个像素所需的位数)=1时,8个像素占1个字节;
bmWidthBytes = 位图宽度 / 8
以下类推
当biBitCount=4时,2个像素占1个字节;
当biBitCount=8时,1个像素占1个字节; 8位图
当biBitCount=24时,1个像素占3个字节; 24位图
我刚刚才解决这个问题.
嘿嘿.
------解决方案--------------------
(1)为图数据的原点根据不同环境而不同,gdi的话是左下角为原点,dx的话就是以左上角为原点
(2)4字节对齐是使的图像的每一行的宽度正好能被4zhengchu,gdi+就使这样的,24位的话对齐宽度是:(img.width*24+31)/32;
(3)这个函数获得的就是图像数据的起始地址把
(5)错位倒不会,但是图像处理的时候注意alpha通道就是了
各位神人,位图这儿有几个地方不是清楚,
(1)位图的数据域中起始处存的是图片左下角的数据?从左往右,从下往上?二进制数据中是这样存的:文件头42 4d .. ..+文件信息头28 00 00 00...+左下角第一个像素点的值 .. .. ..直到右上角的值?(24位)
(2) m_bitmap.GetBitmap(&bm),对于同一幅图片,一幅是24位,一幅改为16位,得到的bm都是一样的,不明白这个bmWidthBytes这个参数会跟什么有关?根据调试的值来看,它的值都是 位图宽度*4,这个4是什么意思?还有它的bmBitsPixel这个参数得值都是32,看书上说这个参数的意思是 每点的位数?那应该是24位的值就是24,16位的就是两个字节16?不知道是不理解错了?
(3)GetBitmapBits这个函数得到的是整个位图文件的二进制数据:文件头+信息头+数据域?而不只是颜色数据?还有一点不明白它获得的顺序是什么样的,在网上找的一段代码中它获得pData后,显示前还转换了下顺序.这是他的地址:http://blog.****.net/wayright/article/details/6591362,
(4)如果GetBitmapBits中返回的pData不是数据域的起始位置,那我应该怎么移动这个指针,移多大呢?觉得是(14+40)*8?
(5)如果前景图片是32位的,背景图片是24位,做透明处理,会不会产生错位?
------解决方案--------------------
1、我记得应该是左上到右下
2、CBitmap是设备相关的,不管你的文件是什么样,读近来之后体现的都是当前设备的信息
3、GetBitmapBits是裸数据的信息,不包括文件头
4、不会
------解决方案--------------------
bmWidthBytes 跟 biBitCount有关.
当biBitCount(每个像素所需的位数)=1时,8个像素占1个字节;
bmWidthBytes = 位图宽度 / 8
以下类推
当biBitCount=4时,2个像素占1个字节;
当biBitCount=8时,1个像素占1个字节; 8位图
当biBitCount=24时,1个像素占3个字节; 24位图
我刚刚才解决这个问题.
嘿嘿.
------解决方案--------------------
(1)为图数据的原点根据不同环境而不同,gdi的话是左下角为原点,dx的话就是以左上角为原点
(2)4字节对齐是使的图像的每一行的宽度正好能被4zhengchu,gdi+就使这样的,24位的话对齐宽度是:(img.width*24+31)/32;
(3)这个函数获得的就是图像数据的起始地址把
(5)错位倒不会,但是图像处理的时候注意alpha通道就是了