首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Winforms打印预览模糊

Winforms打印预览模糊
EN

Stack Overflow用户
提问于 2010-10-30 20:47:05
回答 2查看 1.6K关注 0票数 0

我有一个打印预览,它在窗体'Panel1.DrawToBitmap(memoryImage,bounds);‘上显示捕获的面板。’

我还将图像保存到硬盘上-- 'memoryImage.Save("diary.png")‘

打印预览中的图像在任何缩放级别都是模糊的,保存的图像是完美的(在windows照片查看器和PS中查看)。

我希望打印预览和保存的图像一样好,你有什么想法吗?

下面是代码:

代码语言:javascript
复制
    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例程,也得到了同样的结果。

提诺

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-30 22:00:16

这是打印机和显示器的设备分辨率之间存在巨大差异的必然结果。打印机通常可以以每英寸600点的分辨率打印。监视器通常设置为96 DPI。因此,当你在显示器上打印一个锐利的图像时,图像的每个像素都需要打印一个6x6的斑点。简而言之,这会产生块效应,在屏幕上绘制的任何抗锯齿像素都会被放大6倍。完全破坏了效果。对于使用ClearType抗锯齿绘制的任何文本,这一点尤其明显。红色和蓝色的条纹在纸上变得非常明显。

您可以通过在打印机上一对一地绘制图像来部分解决此问题,确保图像中的1个像素变为纸张上的1个像素。现在看起来应该很好和尖锐(不包括ClearType问题),但您将看到的是一张邮票。将你的手臂延长六倍也会有同样的效果。

好吧,这并不是很有效。使用PrintDocument类,这样您就可以使用打印机的本机分辨率将内容绘制到打印机。在PrintPage事件处理程序中使用e.Graphics提供的方法。避免图像,除非它们是照片,任何没有精细线条艺术的东西都可以很好地缩放。

票数 0
EN

Stack Overflow用户

发布于 2013-06-25 10:38:06

在尝试打印一些自定义文本时,我遇到了类似的“模糊字体”问题,我已经在TableLayoutPanel中预先安排了这些文本作为标签。

我对模糊的解决方案如下:我已经创建了一个面板和标签,大小是期望的最终大小的四倍(使用字体44而不是11,宽度和高度大四倍)。

然后我已经创建了一个(大的)位图,并在最后一步(DrawImage)中缩小了它的比例:

代码语言:javascript
复制
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);
}

生成的文本在预览和实际打印页面中看起来都要清晰得多。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4058755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档