【发布时间】:2019-02-10 19:08:27
【问题描述】:
我正在尝试使用下面的代码将位图转换为 8bpp 灰度
private Bitmap ConvertPixelformat(ref Bitmap Bmp)
{
Bitmap myBitmap = new Bitmap(Bmp);
// Clone a portion of the Bitmap object.
Rectangle cloneRect = new Rectangle(0, 0, Bmp.Width, Bmp.Height);
PixelFormat format = PixelFormat.Format8bppIndexed;
Bitmap cloneBitmap = myBitmap.Clone(cloneRect, format);
var pal = cloneBitmap.Palette;
for (i = 0; i < cloneBitmap.Palette.Entries.Length; ++i)
{
var entry = cloneBitmap.Palette.Entries[i];
var gray = (int)(0.30 * entry.R + 0.59 * entry.G + 0.11 * entry.B);
pal.Entries[i] = Color.FromArgb(gray, gray, gray);
}
cloneBitmap.Palette = pal;
cloneBitmap.SetResolution(500.0F, 500.0F);
return cloneBitmap;
}
检查位图图像的属性显示位深度已正确设置为 8bpp,但不是灰度,而是彩色索引 8bpp。请指导如何做。
【问题讨论】:
-
看起来对吗?不确定您的调色板的创建方式。普通的grayscale Palette 将具有所有值。如果克隆人有任何机会从调色板上拾起,它必须首先在那里。也许你需要 DrawImage,但我不确定那里..
-
@TaW 是的。看来我需要修改代码以输出灰度 8bpp 位图
标签: c# image image-processing bitmap