【发布时间】:2016-05-19 10:31:20
【问题描述】:
我想打印标签。如果我绘制到打印上下文 Graphics 对象,它可以正常工作。但如果我使用临时位图,所有绘制的文本都是像素化的。我认识到临时位图和打印图形对象的分辨率不同(96 dpi 与 600 dpi)。所以我更改了位图分辨率以匹配打印分辨率。所以所有绘制的文字都太大了。
我需要临时位图在打印前旋转图像。
如何正确打印此位图?
像素化代码:(看起来很糟糕,但有临时位图)
// 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);
}
这段代码产生这个打印:
高分辨率代码:(看起来不错,但我需要临时位图!)
// print event handler
private void printPage(object sender, PrintPageEventArgs ev)
{
// draw text directly to print context
labels[printLabelsIndex].PrintLabel(ev.Graphics);
}
这段代码产生这个打印:
【问题讨论】:
-
您必须将位图放大 6 倍。并将其缩小 6 倍。并且不要忘记使用 Graphics.Clear() 设置其背景颜色,如果您忘记了,抗锯齿将无法正常工作。只需以正确的方式执行此操作,使用 Graphics.Transform 属性来旋转输出。 Matrix.RotateAt() 方法是一种非常方便的方法。
-
Graphics.Clear() 是一个好点。 AA 现在确实有效。但由于分辨率错误,它仍然像素化。