2012-10-30 40 views
0

我有提取8位值(如下图),虽然我输出的印象会像下面的方法:获得的位图C#的RGB值

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

我有回报的方法数组中的8位值 - 该方法是否应该不会返回多维数组中的8位值(如上所述),因为所有3组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 
+1

您正在声明一维数组。 – Paparazzi

+1

你希望*输出是什么? –

回答

1

位图的颜色值只是一个字节数组。这取决于它们应该如何分组的价值观的解释。你的代码明确地将图像转换成24bpp RGB,所以你可以做分组。

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

0

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

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