如何在 .NET 中处理具有 Windows Photo Gallery 质量的整页打印图像?
Posted
技术标签:
【中文标题】如何在 .NET 中处理具有 Windows Photo Gallery 质量的整页打印图像?【英文标题】:How can I process an image in .NET for a full-page print with a quality like Windows Photo Gallery does it? 【发布时间】:2010-11-29 06:00:27 【问题描述】:我正在用 C# 编写打印路由,使用 .NET PrintDocument 类来处理 OnPrintPage 事件。
我已设法最大化边距并以横向模式打印图像,但 它看起来不如我从 Windows 照片库打印相同的图像文件(以前的 Windows 图片和传真查看器),Windows Vista 中的默认图像预览程序。
我注意到那里有一个选项用于选择“锐化图像以进行打印”,但它有什么作用?
我考虑过先从 Windows 照片库打印图像的副本,然后再通过打印机发送纸张以打印我需要的自定义叠加层,但每次都很难对齐,因为打印机在没有我需要的精度的情况下吸入纸张......所以我真的需要在 C# 中执行所有绘图命令,包括图像。
有谁知道如何对位图进行预处理,使其打印效果与 Windows 照片库一样好? 是否有任何简单的打印驱动程序可以拦截照片库打印输出作为.NET Image 类可以读取的标准图像文件(bmp、png 等)?我在这里全力以赴。
【问题讨论】:
【参考方案1】:Paint.Net 使用 Windows 图片和传真查看器进行打印,它以前是开源的。
“Paint.Net 源”的快速 Google 似乎打开了它,尽管在他们再次关闭它之前的早期版本中。我会查看它们的源代码,看看它们是如何调用对话框的
【讨论】:
【参考方案2】:如果您尝试拍摄一张小图像并打印它的大版本,则在内存中创建图像的较大版本然后打印该较大版本可能会有所帮助。通常你会这样做:
Bitmap largeBitmap = new Bitmap(800, 600);
using (Graphics g = Graphics.FromImage(largeBitmap))
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(smallImage ...) // I forget which of the 30
// overloads you need here
// then print largeBitmap
基本上,您将让 GDI+ 调整图像而不是打印机的大小;这可能是也可能不是改进。 Photo Gallery 中的“锐化”当然比这更复杂,而且针对的是打印问题。
【讨论】:
在这种特殊情况下,我认为更高的质量与插值没有太大关系,尽管我会尝试一下,因为涉及到一些缩放。它似乎真的在用颜色做一些事情,因为我注意到从 Windows 照片库打印的阴影中没有“带”,就像我从未经修改的 C# 打印它时那样。以上是关于如何在 .NET 中处理具有 Windows Photo Gallery 质量的整页打印图像?的主要内容,如果未能解决你的问题,请参考以下文章