打印 203 dpi 的文档图像需要抖动

本文关键字:抖动 图像 文档 dpi 打印 | 更新日期: 2023-09-27 18:34:23

使用 PrintDocument 类打印标签时遇到问题。我正在尝试打印一个恰好是条形码的图像。此图像是使用此处找到的代码生成的。

我遇到的问题是,在dpi为203的打印机上打印图像时,条形的边缘模糊不清。我认为这是由图像试图在打印头上的 2 个点之间打印时对 pritner 的抖动引起的。

我尝试在生成图像之前缩放条形码,但这没有效果。

public void Print()
{
   PrintDocument printDocument = new PrintDocument
   {
       DefaultPageSettings =
       {
           Landscape = label.Landscape,
           PaperSize = label.PaperSize
       },
       OriginAtMargins = true,
       PrinterSettings = { PrinterName = "PrinterName" },
       PrintController = new StandardPrintController()
   };
   printDocument.PrintPage += On_PrintPage;
   printDocument.Print();
}
private void On_PrintPage(object sender, PrintPageEventArgs e)
{
    e.Graphics.ResetTransform();
    DrawBarcode(_elements[0], e.Graphics);
}
private DrawBarcode(IElement labelElement, Graphics graphics)
{
    float xTranslate = (labelElement.X/96)*Dpi - ((hardMarginX/100)*Dpi );
    float yTranslate = (labelElement.Y/96)*Dpi - ((hardMarginY/100)*Dpi );
    //Call to baroode library
    Image barcodeImage = labelElement.GetBarcodeImage((int) ((labelElement.Width/96)*Dpi ), (int) ((labelElement.Height/96)*Dpi ));
    graphics.TranslateTransform(xTranslate, yTranslate);
    graphics.DrawImage(barcodeImage, new Rectangle(0, 0, barcodeImage.Width, barcodeImage.Height));
    graphics.ResetTransform();
}

IElement对象只是一个类,其中包含有关将打印在标签上的元素的位置和大小的信息。

我认为生成大小(labelElement.Width/96)*Dpi Dpi = 203可以解决问题的地方。在此更改之前,dpi 始终为 300,因为这是 GDI 用作其单位的单位。此更改无助于条形码图像的清晰度,并且会导致元素未出现在应有的位置的问题。

无论如何,我可以在 PrintDocument 类的 203 dpi 打印机上打印清晰的图像(特别是条形码(吗?

谢谢

打印 203 dpi 的文档图像需要抖动

我知道

这是一个陈旧的问题 - 对于其他任何陷入困境的人:

您可以在Win32_PrinterConfiguration中访问 DitherType但它似乎是只读的。

更简单的解决方法是通过 Windows UI 在打印机首选项中实际将抖动设置为 NONE。