0

我有一个提取 8bit 值的方法(如下),尽管我对输出的印象如下:

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

我有返回数组中的 8 位值的方法 - 由于所有 3 组 8 位相互对应以形成颜色,因此该方法是否应该不返回多维数组中的 8 位值(如上)?

当前方法:

 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
4

2 回答 2

1

位图的颜色值只是一个字节数组。应该如何对这些值进行分组取决于对这些值的解释。您的代码将图像显式转换为 24bpp RGB,因此由您来进行分组。

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

于 2012-10-30T13:57:47.153 回答
0

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

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

于 2012-10-30T14:00:41.990 回答