Bitmap位图数据排列方式

读取dicom

C# 使用fo-dicom操作dicom文件-CSDN博客

 

创建位图

通过读取dicom得到像素内存,本例单指彩色图像。

Bitmap dataBmp = new Bitmap(imageWidth, imageHeight, stride, PixelFormat.Format24bppRgb, dstBmp);

当像素的内存按照RGB的排列模式时,颜色不对;

但是转换像素格式为BGR的排列模式时,颜色正确。经过查询Bitmap位图数据显示方式知道了原因。记录一下

 

Bitmap位图数据

该域的大小取决于压缩方法及图像的尺寸和图像的位深度,它包含所有的位图数据字节,这些数据可能是彩色调色板的索引号, 也可能是实际的RGB值,这将根据图像信息头中的位深度值来决定。

如果是8位色图,则每个像素用1个字节表示,取出每个字节,显示到相应的设备上就可以了。

如果是24位色图,则按照BGR的顺序排列,32位色图按照BGRAlpha排列。
 

  • 对于8位色图,每个像素确实只用1个字节表示,这个字节代表的是一个索引值,这个索引值指向一个调色板,调色板中存储了实际的颜色值。所以,显示这些像素时,需要根据索引查找调色板中的颜色信息,而不是直接显示字节值。

  • 对于24位色图,每个像素由3个字节组成,代表红、绿、蓝三个颜色通道的信息。传统上在计算机内存和文件存储中,这通常遵循BGR顺序,尤其是当涉及到一些特定的库(如OpenCV)处理图像时。但是,从概念上讲,人们常说的“24位色”是指RGB信息,只是在具体实现时可能按BGR排列。

  • 对于32位色图(通常指的是带有透明度通道的图像),每个像素由4个字节组成,这些字节按照BGRAlpha顺序排列,分别代表蓝色、绿色、红色的颜色分量以及一个Alpha透明度分量。Alpha通道用于表示像素的透明度,值范围通常是0(完全透明)到255(完全不透明)。

   

注意:

位图数据排列还有一个规则,就是对齐。Windows默认的扫描的最小单位是4字节,如果数据对齐满足这个值的话对于数据的获取速度等都是有很大的增益的。因此,BMP图像顺应了这个要求,要求每行的数据的长度必须是4的倍数,如果不够需要进行比特填充(以0填充),这样可以达到按行的快速存取。这样的话,位图数据的大小就不一定是宽x高x每像素字节数了,因为每行还可能有0填充。填充后的每行数据如下:

BPP :每像素的比特数(Bits Per Pixel)

对于上图 BPP=24,Width=256。为32的倍数,所以没有填充。但是54个字节的文件头应该填充为56。

                

参照链接

关于BMP文件格式的详解_bmp是hex文件吗-CSDN博客

大语言模型

 

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangnaisheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值