c#,wpf BitmapImage CopyPixels(8位bmp文件)有时是正确的,有时不是

时间:2018-02-10 21:16:18

标签: c# wpf bitmapimage

我只想将以前加载的BMP-File转换为byte [] []。它对我自己的测试图像(白色背景上的一些黑点)非常有效,它们都是每像素8位格式。 现在我尝试了一些有人给我的位图相同的代码(也是黑色正方形,白色背景上的矩形),但它没有像我预期的那样工作:

我期望在结果数组中用白色像素表示255(并且黑色只有0),但我在那里找到了不同的值。在一种情况下,应该是白色的像素在数组中以值1结束。

同样,所有这些文件都是8位颜色深度。 另外,我注意到,当我在绘画中打开图像时,再次将它们保存为256色位图,然后它就可以了。 所以我的问题是:

是什么导致了这个问题? (调色板可能起作用吗?) 我怎样才能让它发挥作用?

这是我的业余代码:

public byte[][] ConvertImageToArray (BitmapSource Image)
{
     byte[][] Result = null;
     if (Image != null)
     {
         int Index = 0;
         int size = Image.PixelWidth * Image.PixelHeight * Image.Format.BitsPerPixel/8;
         byte[] RawImg = new byte[size];
         BitmapPalette test = Image.Palette;
         int stride = (Image.PixelWidth * Image.Format.BitsPerPixel) / 8;

         Image.CopyPixels(RawImg, stride, 0);

         Result = new byte[Image.PixelHeight][];
         int Width = Image.PixelWidth;
         for (int i = 0; i < Result.Length; i++)
         {
             Result[i] = new byte[Width];
             for (int k = 0; k < Result[i].Length; k++)
             {
                 Result[i][k] = RawImg[Index++];
             }
         }
     }
     return Result;
}

0 个答案:

没有答案