使用临时位图打印高分辨率

时间:2016-05-19 10:31:20

标签: c# .net printing

我想打印标签。如果我绘制到打印上下文Graphics对象,它的工作没有问题。但是,如果我使用临时位图,则所有绘制的文本都是像素化的。我认识到临时位图和打印图形对象的分辨率是不同的(96 dpi与600 dpi)。所以我改变了位图分辨率以匹配打印分辨率。所以绘制的文字都太大了。

我需要临时位图才能在打印前旋转图像。

如何正确打印此位图?

Pixalated code:(看起来很糟糕,但有临时位图)

    // print event handler
    private void printPage(object sender, PrintPageEventArgs ev)
    {
        // size of the page
        Size s = Form1.getPixelFromCM(Properties.Settings.Default.LabelSize);
        // temporary bitmap object
        Bitmap bmp = new Bitmap(s.Width, s.Height);
        Graphics g = Graphics.FromImage(bmp);
        // draw text 
        labels[printLabelsIndex].PrintLabel(g);
        // draw the bitmap to the page
        ev.Graphics.DrawImage(bmp, 0, 0);
    }

此代码生成此打印:

enter image description here

高分辨率代码:(看起来不错,但我需要临时位图!)

    // print event handler
    private void printPage(object sender, PrintPageEventArgs ev)
    {
        // draw text directly to print context
        labels[printLabelsIndex].PrintLabel(ev.Graphics);
    }

此代码生成此打印:

enter image description here

1 个答案:

答案 0 :(得分:0)

Graphics.DrawImage尊重Bitmap的分辨率是一件好事,虽然它有时会导致混淆,当人们认为拼图的所有部分具有相同的分辨率时。

在这里,您需要显式设置临时位图的分辨率,否则只需继承屏幕分辨率..:

bmp.SetResolution(600,600)

当然现在的标签'尺寸可能不够大..

还要注意术语的问题:分辨率可能意味着大小,即像素或打印机点,但实际上应该是密度,即dpi或'每英寸点数' 。

您希望调出的尺寸以及dpi