仅以灰度渲染到 GDI+

Render to GDI+ only in grayscale

我正在构建一个具有打印预览功能的应用程序。如果打印机不支持彩色,我想用灰度渲染所有内容。我依赖 3P 渲染库,我无法更改它们渲染的颜色。

无需诉诸渲染到屏幕外位图,然后将其转换为灰度等...有什么方法可以让 GDI+ 渲染灰度吗?

不可能告诉 Graphics 对象以灰度方式绘制 (afaik)。

你有三种可能:

1) 渲染到屏幕外图像(你不想要的)

2) 截取当前渲染结果的屏幕截图并将其转换为灰度并在当前渲染结果上绘制(在我看来这不是一个很好的解决方案)

3) 调整您当前的渲染代码并将所有使用的颜色转换为灰度

要将颜色转换为灰度,您可以使用此代码:

public Color ToGrayScaleColor(Color originalColor)
{
    int grayScale = (int)((originalColor.R * .3) + (originalColor.G * .59) + (originalColor.B * .11));
    return Color.FromArgb(grayScale, grayScale, grayScale);
}

http://csharp-me.blogspot.com/2014/01/convert-color-to-gray-scale-in-c-c-sharp.html

找到并调整的代码