获取位图C#的RGB值

时间:2012-10-30 13:37:36

标签: c# .net windows

我有一个提取8位值的方法(下面),虽然我对输出的印象如下:

010 020 030 = Specific Colour
135 250 250 = Specific Colour

我的方法返回数组中的8位值 - 如果方法不返回多维数组中的8位值(如上所述),因为所有3组8位相互对应形成颜色? / p>

当前方法:

 private static byte[] GetColorData(Bitmap bmp)
        {
            Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
            BitmapData bmpdata = bmp.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);

            IntPtr ptr = bmpdata.Scan0;
            int bytes = bmpdata.Stride * bmp.Height;
            byte[] results = new byte[bytes];
            Marshal.Copy(ptr, results, 0, bytes);

            bmp.UnlockBits(bmpdata);
            return results;
        }

当前方法输出:

100
101
000
255
250

2 个答案:

答案 0 :(得分:1)

位图的颜色值只是一个字节数组。这取决于如何对它们进行分组的价值的解释。您的代码显式将图像转换为24bpp RGB,因此您可以自行进行分组。

另外,您返回byte[],根据定义,它只有一个维度。如果你想要一个三维数组,你需要自己创建一个数组并自己将results中的值添加到新的多维数组中。

答案 1 :(得分:0)

当您以请求的方式读取像素数据时,您将获取请求的数据作为字节数组,每个字节 - 三元组定义1个像素。

您可以为每个像素创建一个Tuple<byte,byte,byte>个实例,您可以在其中对像素级别的值进行分组,然后返回ICollection<Tuple<byte,byte,byte>>以此分组方式获取所有像素。