203 dpi 上的 PrintDocument 图像需要抖动

Posted

技术标签:

【中文标题】203 dpi 上的 PrintDocument 图像需要抖动【英文标题】:PrintDocument images on 203 dpi require dithering 【发布时间】:2015-02-14 15:38:46 【问题描述】:

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

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

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

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)*DpiDpi = 203 可以解决问题。在此更改之前,dpi 始终为 300,因为这是 GDI 使用的单位。此更改对条码图像的清晰度没有帮助,并导致元素没有出现在应有的位置。

我是否可以在 PrintDocument 类的 203 dpi 打印机上打印清晰的图像(特别是条形码)?

谢谢

【问题讨论】:

【参考方案1】:

我知道这是一个过时的问题-对于其他任何遇到此问题的人:

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

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

【讨论】:

以上是关于203 dpi 上的 PrintDocument 图像需要抖动的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PrintDocument 在热敏打印机上打印文本文件?

linux (wayland) 上的 SoapUI - 高 DPI/4K 缩放问题

PhoneGap - 视口上的目标密度 dpi

Docker 上的 cx_Oracle:DPI-1047:无法加载 64 位 Oracle 客户端库:“libclntsh.so

条码打印不规则线条

如何跳转到 PrintDocument 的下一页?