我有一个打印预览,它在窗体'Panel1.DrawToBitmap(memoryImage,bounds);‘上显示捕获的面板。’
我还将图像保存到硬盘上-- 'memoryImage.Save("diary.png")‘
打印预览中的图像在任何缩放级别都是模糊的,保存的图像是完美的(在windows照片查看器和PS中查看)。
我希望打印预览和保存的图像一样好,你有什么想法吗?
下面是代码:
private void CaptureScreen()
{
int x = splitContainerDiary.Location.X;
int y = splitContainerDiary.Location.Y;
int SCwidth = splitContainerDiary.Panel1.Width;
int SCheight = splitContainerDiary.Panel1.Height;
Rectangle bounds = new Rectangle(x, y, SCwidth, SCheight);
memoryImage = new Bitmap(SCwidth, SCheight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
splitContainerDiary.Panel1.DrawToBitmap(memoryImage, bounds);
memoryImage.Save("diary.png");
}
private void printDocumentDiary_PrintPage(object sender, PrintPageEventArgs e)
{
CaptureScreen();
Font HeaderFont = new Font("Consolas", 16, FontStyle.Bold);
e.Graphics.DrawString(selectedYear.ToString() + " - " + name, HeaderFont, Brushes.Black, 15, 15);
e.Graphics.DrawImage(Image.FromFile("diary.png"), 5, 5);
// e.Graphics.DrawImage(memoryImage, 0, 40);
PrintDoodle(e);
}我试着从内存(e.Graphics.DrawImage(memoryImage,0,40)和保存的图像'e.Graphics.DrawImage(Image.FromFile("diary.png"),5,5)中绘制图像;‘它们在打印预览中都是模糊的。
我也尝试过不同的像素格式,但没有使用joy。
我已经尝试保存图像为BMP,JPG,PNG,没有joy也(当绘制图像fromFile)。
我也尝试过使用BitBlt例程,也得到了同样的结果。
提诺
发布于 2010-10-30 22:00:16
这是打印机和显示器的设备分辨率之间存在巨大差异的必然结果。打印机通常可以以每英寸600点的分辨率打印。监视器通常设置为96 DPI。因此,当你在显示器上打印一个锐利的图像时,图像的每个像素都需要打印一个6x6的斑点。简而言之,这会产生块效应,在屏幕上绘制的任何抗锯齿像素都会被放大6倍。完全破坏了效果。对于使用ClearType抗锯齿绘制的任何文本,这一点尤其明显。红色和蓝色的条纹在纸上变得非常明显。
您可以通过在打印机上一对一地绘制图像来部分解决此问题,确保图像中的1个像素变为纸张上的1个像素。现在看起来应该很好和尖锐(不包括ClearType问题),但您将看到的是一张邮票。将你的手臂延长六倍也会有同样的效果。
好吧,这并不是很有效。使用PrintDocument类,这样您就可以使用打印机的本机分辨率将内容绘制到打印机。在PrintPage事件处理程序中使用e.Graphics提供的方法。避免图像,除非它们是照片,任何没有精细线条艺术的东西都可以很好地缩放。
发布于 2013-06-25 10:38:06
在尝试打印一些自定义文本时,我遇到了类似的“模糊字体”问题,我已经在TableLayoutPanel中预先安排了这些文本作为标签。
我对模糊的解决方案如下:我已经创建了一个面板和标签,大小是期望的最终大小的四倍(使用字体44而不是11,宽度和高度大四倍)。
然后我已经创建了一个(大的)位图,并在最后一步(DrawImage)中缩小了它的比例:
using (var bmp = new Bitmap(tableLayout.Width, tableLayout.Height))
{
tableLayout.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
printPageEventArgs.Graphics.DrawImage(
bmp,
printPageEventArgs.MarginBounds.X,
printPageEventArgs.MarginBounds.Y,
bmp.Width / 4,
bmp.Height / 4);
}生成的文本在预览和实际打印页面中看起来都要清晰得多。
当然,只有当你可以操纵控件的大小时,这种方法才能起作用,例如,通过在“屏幕外”创建控件。但是,如果您需要打印实际显示的控件,它将不起作用。
https://stackoverflow.com/questions/4058755
复制相似问题