c# - Bgr32 PixelFormat 中的第四个 channel 是什么

标签 c# .net wpf image-processing

我目前正在使用 C# 进行一些图像处理,我对 Bgr32 像素格式感到困惑。以下说明来自microsoft msdn:http://msdn.microsoft.com/en-us/library/system.windows.media.pixelformats(v=vs.110).aspx

  1. Bgr24 是一种每像素 24 位 (BPP) 的 sRGB 格式。每个颜色 channel (蓝色、绿色和红色)都分配了每像素 8 位 (BPP)。 ✓
  2. Bgra32 是一种每像素 32 位 (BPP) 的 sRGB 格式。每个 channel (蓝色、绿色、红色和 alpha)都分配了每像素 8 位 (BPP)。 ✓
  3. Bgr32 是一种每像素 32 位 (BPP) 的 sRGB 格式。每个颜色 channel (蓝色、绿色和红色)都分配了每像素 8 位 (BPP)。 -> (⊙.☉)? WTF

3 个 channel ,每个 8 位 -> 3x8bit = 24bit

最后一个 channel /剩余的 8 位是什么?

提前致谢

最佳答案

它未被使用,但将颜色表示为整数具有实际原因,无论是读取还是写入,它都是对齐的。

最后,它表示 24 位颜色,最接近表示它的类型是 32 位整数。用两个整数来表示这样的颜色会有点奇怪:一个 16 位(短)整数和一个 8 位(字节)整数。

现在有 25% 的空间未被使用,这最终是一种浪费。

与 RGB24 相比,以一种颜色由一个整数表示的方式使用它更有意义,而在前者中它必须是 3 个字节。显然,您必须将其拆包才能获得不同的组件,但如今这些操作非常便宜。

就我个人而言,只有存在内存限制或任何其他类型的限制(例如硬件)时,我才会使用 RGB24。其他我会选择 RGBA 甚至 PBGRA,因为它有很多好处,例如透明度,并且在 blitting 操作期间节省额外的计算,以及更好地混合透明轮廓。

对于这种表示可以为您提供的好处,我建议您看一下这个问题:Pre-multiplied alpha compositing (看看我发布的结果)

关于c# - Bgr32 PixelFormat 中的第四个 channel 是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23150576/

相关文章:

c# - 卡在 C# 中的 BinaryExpression

c# - 模拟具体类时如何设置属性

C#项目引用netcoreapp3.1中的F#类lib

c# - 有没有一种简单的方法可以将命令绑定(bind)到 MVVM WPF 中的列表框?

wpf - 带有绑定(bind)参数的 MarkupExtension

c# - asp.net mvc4 中 web.config 中的 Windows 身份验证

c# - 如何在 Xamarin.Forms 中用引号将字符串括起来

.net - 如何在 Protobuf.Net 中映射系统枚举

c# - 如何将类型的默认值设置为 Nothing?

c# - 防止 WPF 4.0 Datagrid 显示空列