2010-10-30 111 views
0

我有一个打印预览,显示窗体上的捕获面板'Panel1.DrawToBitmap(memoryImage,bounds);'Winforms打印预览模糊

我也将图像保存到我的硬盘驱动器 - “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);”他们在打印预览两个模糊

我已经尝试了不同的像素格式没有快乐要么

我试图拯救。图像为BMP,JPG,PNG也没有喜悦(从文件中绘制图像时)。

我曾尝试使用BitBlt例程也具有相同的结果。

蒂诺

回答

0

这是一台打印机VS显示器的设备分辨率之间的显着差异的必然结果。打印机通常可以以每英寸600点的分辨率进行打印。监视器通常设置为96 DPI。因此,当您在显示器上打印尖锐锐利的图像时,图像的每个像素都需要打印一个6 x 6的斑点。由于产生的块状图像很短,使用抗锯齿功能在屏幕上绘制的任何图像都会得到抗锯齿像素也是6倍大。彻底破坏效果。对于使用ClearType消除锯齿绘制的任何文本,这一点尤其明显。红色和蓝色的条纹在纸上变得非常明显。

通过在打印机上一对一地绘制图像,可以部分解决这个问题,确保图像中的1个像素成为纸上的1个像素。这应该现在看起来很好和尖锐(减去ClearType问题),但你会看看邮票。长时间增长你的手臂六次会产生同样的效果。

嗯,这只是行不通。使用PrintDocument类,以便使用其原始分辨率将东西绘制到打印机。使用PrintPage事件处理程序中的e.Graphics提供的方法。避免图像,除非他们是照片,任何没有细致的线条艺术将可以很好地扩展。

+0

汉斯谢谢你的回答,不是我所希望的,但我现在明白了吧。我打印了一个12个月的datagidview日记,每个月每天都有一个单元格,所以它会花费一些工作来使用e.graphics绘图方法:-(所以我认为我现在会坚持使用模糊效果,再次感谢Thankyou,蒂诺 – 2010-10-30 14:40:33

0

我遇到了一个类似的“模糊字体”的问题,同时试图打印出一些自定义文本,我已经预先安排为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); 
} 

产生的文字看起来更清晰无论是在预览和实际打印页面。

当然,如果您可以操纵控件的大小,例如通过将它创建为“屏幕外”,这种方法只能工作。但如果您需要打印实际显示的控件,它将不起作用。