我目前正在用C#做一些图像处理工作,我对Bgr32 Pixel格式感到困惑。以下描述来自Microsoft msdn:http://msdn.microsoft.com/en-us/library/system.windows.media.pixelformats(v=vs.110).aspx

  • Bgr24 是一种sRGB格式,每像素24位(BPP)。每个颜色 channel (蓝色,绿色和红色)被分配每个像素8位(BPP)。 ✓
  • Bgra32 是一种sRGB格式,每像素32位(BPP)。每个 channel (蓝色,绿色,红色和alpha)分配给每个像素8位(BPP)。 ✓
  • Bgr32 是一种sRGB格式,每像素32位(BPP)。每个颜色 channel (蓝色,绿色和红色)被分配每个像素8位(BPP)。 ->(⊙.☉)? WTF

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

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

    提前致谢

    最佳答案

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

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

    现在没有使用25%的空间,这最终是浪费。

    与RGB24相比,以一种颜色用一个整数表示颜色的方式使用它更为有意义,因为在前一个整数上颜色必须为3个字节。显然,您必须打开包装才能获得不同的组件,但是如今这些操作确实很便宜。

    就个人而言,仅当存在内存限制或任何其他类型的限制(例如硬件)时,我才使用RGB24。我要使用RGBA甚至PBGRA的其他任何东西,因为它具有许多优点,例如透明性,并且在blittting操作期间省去了额外的计算,并且可以更好地融合透明轮廓。

    为了获得这种表示形式可以给您带来的好处,我建议您看一下这个问题:Pre-multiplied alpha compositing(看一下我发布的结果)

    10-06 05:14