每个人都过得愉快。 我需要使用位图读取图像像素数据。比使用这些数据制作一些东西并写回图像。使用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图像(通过获取像素数据)?之前搜索一些例子,但我的“ 弯曲的手“不允许使用我发现的东西。
答案 0 :(得分:0)
在8 bpp(和更少)图像的情况下,位图数据包含调色板条目而不是直接颜色信息。对于此类图像,Bitmap.Palette
属性为非空,它包含图像可以使用的颜色。
8bpp表示256种可能的不同颜色,一个像素正好是一个字节。但是这里的0
值不是颜色,而是调色板中的第0个条目。
要将高彩色图像转换为索引图像,请在此处查看我的答案:Saving Transparent PNG as Transparent GIF