从Silverlight打印位图 - 图像模糊

时间:2012-10-22 19:10:44

标签: c# .net silverlight printing

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

当我打印时 - 我从PrintableArea得到PrintDocument并且它是816x1056

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

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

代码:

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");

文档在屏幕上的显示方式(图像内部)

enter image description here

打印出来:

enter image description here

3 个答案:

答案 0 :(得分:2)

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

var image = new Image { Source = bitmap, Stretch = Stretch.UniformToFill };

答案 1 :(得分:0)

Blilinear滤镜会使图像模糊。你可能想尝试WriteableBitmapExtensions.Interpolation.NearestNeighbor而不是看看你是否会得到更好的结果

答案 2 :(得分:0)

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