使用Bitmap读取\写入Format8bppIndexed图像的像素数据

时间:2018-01-15 19:35:43

标签: c# image bitmap

每个人都过得愉快。 我需要使用位图读取图像像素数据。比使用这些数据制作一些东西并写回图像。使用GetPixels& SetPixels函数

string ImageFilePath = "image.jpg";
Bitmap image = Bitmap(ImageFilePath);
.....
for (int i = 0; i < image.Height; i++)
        {
            for (int j = 0; j < image.Width; j++)
            {
                Color pixelColor = image.GetPixel(j, i);
                RedColor  [i, j] = pixelColor.R;
                GreenColor[i, j] = pixelColor.G;
                BlueColor [i, j] = pixelColor.B;
            }
        }
.......


for (int y = 0; y < image.Height; y++)
        {
            for (int x = 0; x < image.Width; x++)
            {
               ...............
               image.SetPixel(x, y, Color.FromArgb(red, green, blue));
            }
         }    

使用24bbp图像,它可以正常工作。但是使用Format8bppIndexed有一些麻烦,使用下面的方法(GetPixels)获取错误的像素值。更不用说在计算之后记录回文件了。 有人可以给代码示例如何正确地使用位图读取\ write 8bpp图像(通过获取像素数据)?之前搜索一些例子,但我的“ 弯曲的手“不允许使用我发现的东西。

1 个答案:

答案 0 :(得分:0)

在8 bpp(和更少)图像的情况下,位图数据包含调色板条目而不是直接颜色信息。对于此类图像,Bitmap.Palette属性为非空,它包含图像可以使用的颜色。

8bpp表示256种可能的不同颜色,一个像素正好是一个字节。但是这里的0值不是颜色,而是调色板中的第0个条目。

要将高彩色图像转换为索引图像,请在此处查看我的答案:Saving Transparent PNG as Transparent GIF