我想在24位bmp图像上找到蓝色区域。我怎样才能找到蓝色通道?访问蓝色通道的方式是什么?bmp 24位文件格式的蓝色通道
0
A
回答
0
24位像素(24bpp)格式支持16,777,216个不同颜色 并且每3字节存储1个像素值。每个像素值定义像素的红色,绿色和蓝色样本(RGBAX 表示法中的8.8.8.0.0) 。具体按顺序(蓝色,绿色和红色,每个样本每个 8位)。
...从here。
2
24位位图(.bmp)图像的标头为54个字节。之后是pixeldata。每个像素使用3个字节:蓝色,绿色,红色。
要看到这一点,在油漆中制作一个1x1像素的图像,并使一个像素为蓝色。如果在hexeditor中查看.bmp文件,则会看到第55个字节的值为FF(蓝色),而之后的2个为00(不绿色,不显示红色)。当然,如果你编写一个读取所有字节的C程序,你也可以看到这一点。如果从第55个字节打印值直到结束,您将看到相同的结果。
pixeldata需要对齐,这叫做stride。步幅被计算为如下:
stride = (width * bpp)/8;
在一个3x3 BMP,步幅将(3 * 24)/ 8 = 9。这个值需要由4上舍入到一个数整除(12在这种情况下) ,因此每行需要3个额外的字节才能正确对齐位。所以,如果所有的字节是蓝色的,54字节后,你将有:
FF 00 00 FF 00 00 FF 00 00 00 00 00
FF 00 00 FF 00 00 FF 00 00 00 00 00
FF 00 00 FF 00 00 FF 00 00 00 00 00
对于一个4×4 BMP,跨度=(4 * 24)/ 8 = 12。12是被4整除,所以没有多余的需要的字节。对于5x5 bmp,stride =(5 * 24)/ 8 = 15,因此每行需要1个额外的字节。
要了解更多关于bmp文件格式的信息,请查看this wikipedia page。希望这可以帮助!
相关问题
- 1. Ico格式 - 32位PNG与32位BMP与24位BMP
- 2. 24位BMP与256色BMP的像素存储
- 3. 将24位BMP转换为C中的单色位#
- 4. 32位rgb bmp到C#中的24位rgb bmp问题
- 5. 24位Alpha通道中BASE64_ENCODE
- 6. MATLAB:转换一个3信道24位的bmp图像分成1个信道16位的BMP图像
- 7. 将24位bmp转换为16位?
- 8. 将32位bmp转换为24位
- 9. 读取24位BMP的宽度/高度
- 10. 相互更改位图中的蓝色和红色通道android
- 11. 使用C++读取1,8或24位BMP文件
- 12. ImageMagick的:在24位BMP图片不能转换为8位BMP图像
- 13. 转换8位色的BMP图像到8位灰度BMP
- 14. 加载位图文件(.bmp)
- 15. Mayavi通过VNC不需要的蓝色 - 红色通道切换
- 16. Matlab的:加载的.tif>转换BMP 256>转换BMP 24位
- 17. 通过蓝色浏览文件
- 18. 如何把.png格式文件转换成.bmp格式?
- 19. 从BMP文件创建带alpha通道的HBITMAP
- 20. 失去打开BMP文件的alpha通道信息
- 21. 从一个24位BMP文件加载到内存中获取HBITMAP
- 22. 24位数据类型数组保存24位位图文件
- 23. 如何区分32位和24位bmp文件?另外我该如何读取32位bmp文件到C++数组中?
- 24. 如何将jpg转换为24位未压缩的BMP 4.0?
- 25. 如何使用SSE2/SSE3/SSE4处理24位3通道彩色图像?
- 26. 将8位bmp转换为半色调bmp
- 27. 的Java:从原材料BMP文件格式的数据
- 28. 将32位位图保存为C#中的1位.bmp文件
- 29. .bmp文件格式的最大分辨率
- 30. PIL保存为24位真彩色位图
你试过了什么?你如何访问位图?手动?通过图书馆?请张贴一些代码。 – 2012-01-09 10:03:14