vb.net – 打印/图形问题
语言:
VB .NET 2010 Win Form 范围: 问题: 测试: Dim g2 As Graphics g2 = Form1.PictureBox2.CreateGraphics g2.CompositingQuality = Drawing2D.CompositingQuality.HighQuality g2.SmoothingMode = Drawing2D.SmoothingMode.HighQuality g2.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic g2.Clear(Color.White) g2.DrawImage(largeimage,New Point(0,0)) Dim myBrush As Brush Dim i As Integer = 0 Do Until i = label_array.Count - 1 myBrush = New SolidBrush(label_array(i).ForeColor) g2.DrawString(label_array(i).Text,label_array(i).Font,myBrush,label_array(i).Location) i = i + 1 Loop 在打印方法中,我使用上述方法将叠加和图像输出到图片框.当这样做时,它工作,但是…… e.Graphics.CompositingQuality = Drawing2D.CompositingQuality.HighQuality e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality e.Graphics.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic e.Graphics.Clear(Color.White) e.Graphics.DrawImage(largeimage,0)) i = 0 Do Until i = label_array.Count - 1 myBrush = New SolidBrush(label_array(i).ForeColor) e.Graphics.DrawString(label_array(i).Text,label_array(i).Location) i = i + 1 Loop ..将它显示在上面显示的打印图形上会导致错位…… 任何想法都欢迎,因为我会尝试任何事情.我猜测打印图形正在做一些我不知道的普通图形. 我注意到与DrawString相比,TextRenderer.DrawText改善了结果.然而,当使用它时,结果似乎是通过一些未知的缩放因子从原始缩放… 以下是原始顶部的结果叠加层: 解决方法
你正在重新发现Graphics.DrawString()的一个众所周知的问题,它是不准确的.这个问题的最简单的演示是这个样本Winforms表单:
public partial class Form1 : Form { public Form1() { InitializeComponent(); } protected override void OnPaint(PaintEventArgs e) { e.Graphics.DrawString("Hiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",this.Font,Brushes.Black,0); } } 看起来像这样: 没有多少魔法可以让你在字符串中突然改变字母之间的间距重叠. GDI是微软首次尝试解决独立文本渲染问题,但效果并不理想.这是一个很好的公司,WPF是第二次尝试,它有很多模糊输出的高手.解决的方式类似于在.NET 2.0 for Winforms中修复的方式,您应始终使用TextRenderer.DrawText()将文本呈现到窗口.这并不试图使渲染文本平滑地缩放,它总是更喜欢适合像素网格. WPF的理想与显示渲染模式相同,added in .NET 4. 您的方法存在重大的其他问题,文本的呈现方式非常不适合打印机.您可以看到,当您放大时可以看到像素,SysInternals的ZoomIt实用程序对此有好处.我放大右手边图中的字母a: 注意字母形状边缘的红色和蓝色像素.这是一种名为ClearType的抗锯齿技术,它增强了液晶显示器的感知分辨率.它仅适用于LCD面板,它不适用于不具有相同条纹图案的打印机.在纸面上,这封信看起来很模糊,带有彩色条纹.尽管它在Zebra打印机上并没有那么糟糕,因为它不支持彩色打印. 这些是特定于将文本呈现给监视器的工件,具有相当差的分辨率的设备.像素网格拟合和ClearType是使文本看起来不错的技巧.典型的监视器每英寸不超过约120个像素.尽管苹果推出了“视网膜”显示屏,但这种情况最终有所改善.一家与高分辨率显示器有利害关系的公司,传统上都是文本in “ideal” mode. 这些渲染技巧完全不适合打印机,这种设备具有更高的分辨率.每英寸600像素是典型的,比显示器容易5倍.通过将图片框绘制到打印机,您实际上会浪费直接绘制到打印机时所获得的改进.它们的差异非常显着,用肉眼很容易看出来.当您以600 dpi渲染文本时,文本看起来更加美观和清晰.最初为120 dpi渲染并为打印机放大的文本看起来像“blobby”和粗糙. 始终使用PrintDocument类绘制到打印机. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |