203 dpi上的PrintDocument图像需要抖动

时间:2014-12-16 10:42:21

标签: c# printing barcode gdi

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

生成的

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

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

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打印机上打印清晰图像(特别是条形码)吗?

由于

1 个答案:

答案 0 :(得分:0)

我知道这是一个陈旧的问题 - 对于其他任何人来说:

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

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