使用PixelFormat.Format8bppIndexed显示位图时出现奇怪的颜色

时间:2016-06-08 15:05:10

标签: c# bitmap gdi+ system.drawing indexed

我想请求帮助。我想从数组创建一个图像并在PictureBox中显示它。但是应该是灰度级的图像以奇怪的颜色显示。在过去,我遇到过这样的问题,但到目前为止使用的方法都失败了。这是我的代码:

        public static Bitmap BitmapFromArray(int[] pixelValues,int rows, int columns)
    {
        Bitmap bitmap = new Bitmap(rows, columns);
        BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, rows, columns), ImageLockMode.ReadWrite, PixelFormat.Format8bppIndexed);

        byte[] pixelValuesOriginal = new byte[Math.Abs(bmpData.Stride) * bitmap.Height];

        //Pobierz wartosc wszystkich punktow obrazu
        System.Runtime.InteropServices.Marshal.Copy(bmpData.Scan0, pixelValuesOriginal, 0, pixelValues.Length);

        for (int i = 0; i < pixelValues.Length; i++)
        {
            pixelValuesOriginal[i] = (byte)pixelValues[i];
        }

        //Ustaw wartosc wszystkich punktow obrazu
        System.Runtime.InteropServices.Marshal.Copy(pixelValuesOriginal, 0, bmpData.Scan0, pixelValuesOriginal.Length);

        bitmap.UnlockBits(bmpData);

        return bitmap;
    }    

我尝试了我在此处找到的方法:Editing 8bpp indexed Bitmaps

        ColorPalette pal = bitmap.Palette;
        for (int i = 0; i <= 255; i++)
        {
            pal.Entries[i] = Color.FromArgb(i, i, i);
        }
        bitmap.Palette = pal;

但是这次它没有用,因为bitmap.Palette.Entries是一个包含0个元素的数组。

我还尝试更改PixelFormat.Format24bppRgb的PixelFormat并使用这样的技巧:

        for (int i = 0; i < pixelValues.Length; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                pixelValuesOriginal[i + j] = (byte)pixelValues[i];
            }
        }

但后来我并排了三张灰度图片。

我将很感激如何处理这个问题。

0 个答案:

没有答案