【发布时间】:2011-09-15 08:33:16
【问题描述】:
我正在尝试使用 C# 将 32bpp 屏幕截图图像转换为 8bpp(或 4bpp 或 1bpp)格式。我已经看过几个关于类似主题的 stackoverflow 答案,并且大多数建议使用以下代码进行变体:
public static Bitmap Convert(Bitmap oldbmp)
{
Bitmap newbmp = new Bitmap(oldbmp.Width, oldbmp.Height, PixelFormat.Format8bppIndexed);
Graphics gr = Graphics.FromImage(newbmp);
gr.PageUnit = GraphicsUnit.Pixel;
gr.DrawImageUnscaled(oldbmp, 0, 0);
return newbmp;
}
但是,当它执行时,我得到一个异常:A graphics object cannot be created from an image that has an indexed pixel format。我知道 8、4 和 1bpp 图像具有颜色表映射,而不是实际颜色像素本身(如 32 或 16bpp 图像)所以我假设我在某处缺少一些转换步骤,但我对 C# 相当陌生(即将到来来自 C++ 背景)并且希望能够使用本机 C# 调用而不是诉诸 PInvoking BitBlt 和 GetDIBits 等。有人能帮我解决这个问题吗?谢谢。
编辑:我应该指出我需要它向后兼容 .NET framework 2.0
【问题讨论】: