如何在不实际显示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:如果可能,我宁愿不使用任何外部库(因为公司政策)。
答案 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的服务打印。)