将视觉效果打印为灰度WPF

时间:2014-10-29 08:11:43

标签: c# wpf printing

如何在不实际显示PrintDialog的情况下将视觉效果打印为灰度,例如

PrintDialog dialog = new Dialog();
dialog.PrintQueue = new PrintQueue(new PrintServer(), printerNameAsString);
dialog.PrintTicket.InputBin = InputBin.AutoSelect;
// Further settings, e.g. PageMediaSize and scaling the visual.    

dialog.PrintVisual(myVisual, "myDescription");

我可以以某种方式让PrinterDialog以灰度打印视觉效果吗?或者是否有其他方法可以实现我的视觉效果的灰度打印输出?

编辑:myVisual(我想要打印的Visual)是一个Grid,所以它继承自UIElement。 编辑2:如果可能,我宁愿不使用任何外部库(因为公司政策)。

3 个答案:

答案 0 :(得分:2)

在PrintDialog中可以设置OutputColor:

myPrintDialog.PrintTicket.OutputColor = OutputColor.Grayscale;

此外,PrintCapabilities可以实际检查哪些OutputColors是可能的:

PrintCapabilities capabilities = myPrintDialog.PrintQueue.GetPrintCapabilities(myPrintDialog.PrintTicket);
ReadOnlyCollection<OutputColor> possibleColors = capabilities.OutputColorCapability;

在我可用的硬件上,这很好用。

答案 1 :(得分:1)

您可以尝试在Microsoft.Expression.Effects程序集中使用标准库。这里的效果是MonochromeEffect。只需在打印视觉效果之前应用此效果:

myVisual.Effect = new MonochromeEffect();//make grayscale
dialog.PrintVisual(myVisual, "myDescription");
myVisual.Effect = null; //turn it off

你必须导入我上面提到的库并使用说明添加它:

using Microsoft.Expression.Media.Effects;

答案 2 :(得分:0)

我遇到了一个类似的问题,即DrawString总是打印出黑色 - 即使画笔指定了较浅的色调。我终于发现,通过将图像放置到图形对象上,它将打印出图像中较浅的阴影。感觉就像一个黑客,但它的工作原理! (printdialog解决方案可能也有效 - 我不知道,因为我自动从没有printdialog的服务打印。)