0

我正在尝试从 Silverlight 应用程序打印图像。我的扫描质量非常好(TIFF),分辨率为 1696x2200

当我打印时 - 我从那里得到PrintableAreaPrintDocument它是 816x1056

我所做的 - 我将位图的大小调整为可打印区域(以使文档适合页面),我得到的结果是模糊的图像。我知道这是缩放问题(很可能),但是如何正确缩放以使其看起来不错?当我在 Image 中显示文档并设置图像大小时 - 它看起来不错。

为了调整大小,我使用 WriteableBitmapEx 扩展并尝试了两种类型的调整大小(最近邻和双线性)

代码:

var printDocument = new PrintDocument(); 

            printDocument.PrintPage += (s, ea) =>
                {
                    var printableArea = ea.PrintableArea;

                    var bitmap = this.currentPreviewPage.FullBitmap.Resize((int)printableArea.Width, (int)printableArea.Height, WriteableBitmapExtensions.Interpolation.Bilinear);

                    var image = new Image { Source = bitmap };
                    var canvas = new Canvas { Width = bitmap.PixelWidth, Height = bitmap.PixelHeight };
                    canvas.Children.Add(image);

                    ea.PageVisual = canvas; 
                    ea.HasMorePages = false;
                }; 

            printDocument.PrintBitmap("Silverlight Bitmap Print");

文档在屏幕上的外观(图片内)

在此处输入图像描述

这是打印出来的:

在此处输入图像描述

4

3 回答 3

2

在声明元素时,不要使用 WriteableBitmapEx 扩展,而是Image尝试设置Stretch属性,使其根据指定的最大尺寸进行拉伸:

var image = new Image { Source = bitmap, Stretch = Stretch.UniformToFill };
于 2012-10-22T19:15:41.697 回答
0

在我的情况下,设置 UseLayoutRounding="True" 就足够了。

于 2013-11-13T21:35:46.153 回答
0

Blilinear 过滤器往往会模糊图像。您可能想尝试 WriteableBitmapExtensions.Interpolation.NearestNeighbor 来查看是否获得更好的结果

于 2012-10-22T19:19:36.923 回答