gpt4 book ai didi

c# - 打印质量 winform

转载 作者:可可西里 更新时间:2023-11-01 08:18:06 24 4
gpt4 key购买 nike

我在尝试从 WinForms 应用程序打印时遇到了 2 个问题。无论我尝试什么,第一个都是非常非常糟糕的质量。第二个是我从左上角开始有一个很大的页边距并且 winform 正在切割。有任何想法吗?这是我的代码:

Bitmap MemoryImage;
public void GetPrintArea(Panel pnl)
{
MemoryImage = new Bitmap(pnl.Width, pnl.Height);
Rectangle rect = new Rectangle(0, 0, pnl.Width, pnl.Height);
pnl.DrawToBitmap(MemoryImage, new Rectangle(0, 0, pnl.Width, pnl.Height));
}
protected override void OnPaint(PaintEventArgs e)
{
if (MemoryImage != null)
{
e.Graphics.DrawImage(MemoryImage, 0, 0);
base.OnPaint(e);
}
}
void printdoc1_PrintPage(object sender, PrintPageEventArgs e)
{
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
e.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
Rectangle pagearea = e.PageBounds;
e.Graphics.DrawImage(MemoryImage, (pagearea.Width / 2) - (this.panel1.Width / 2), this.panel1.Location.Y);

}
public void Print(Panel pnl)
{
panel1 = pnl;
GetPrintArea(pnl);
printPreviewDialog1.Document = printdoc1;
printPreviewDialog1.ShowDialog();
}
private void button2_Click(object sender, EventArgs e)
{
Print(this.panel1);
}

最佳答案

这个问题反复出现。没有 Elixir ,尽管最终问题可能会消失。 “视网膜”显示器的出现是关键。

核心问题是显示器的分辨率大大比打印机差。典型打印机的分辨率为每英寸 600 点。这使得它能够在一张纸上打印 6600 x 5100 个像素。比显示器所能显示的要多得多,,全高清显示器最高可达 1920 x 1080 像素。大约差 5 倍,或多或少。

当您将显示器上显示的内容打印在一张纸上并尝试保持相同尺寸时,效果不佳。不可避免地,由于显示器上缺少像素,显示器上的每个像素都以 5x5 的 Blob 打印在纸上。如果您尝试保持一对一的像素映射,您在纸上获得清晰的副本。但它已经变成了邮票。

不可避免地,由于这些像素 Blob ,打印输出看起来非常粗糙。看起来特别糟糕的是文本。操作系统使用许多技巧使文本在分辨率较差的显示器上看起来不错。抗锯齿是标准配置,像 ClearType 这样的技巧旨在利用显示器物理特性,帮助提高感知分辨率。这在打印文本时不再有效,那些抗锯齿像素变成 Blob 并变得非常明显,完全破坏了效果。对于彩色打印机上的 ClearType 文本尤其不利,现在可以清楚地看到红色和蓝色的彩色条纹。

唯一合适的方法是使用实​​际分辨率而不是显示器分辨率渲染到打印机。就像在 .NET 中使用 PrintDocument 类一样。使用报告生成器有助于避免为其编写代码。

关于c# - 打印质量 winform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12510811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com