我正在尝试从Silverlight 4应用程序打印图像(QR码),但是打印时图像是无污染的(我已尝试过XPS文件打印机和硬件打印机)图像是blury,条形码阅读器无法读取
Image from printed XPS document http://img805.imageshack.us/img805/7677/qraliasing.png
我正在使用这个简单的代码进行打印:
WriteableBitmap bitmap = new WriteableBitmap(width, height);
//write bitmap pixels
Image image = new Image(){Stretch = Stretch.None};
image.Source = bitmap;
image.Width = bitmap.PixelWidth;
image.Height = bitmap.PixelHeight;
//Print
PrintDocument printDocument = new PrintDocument();
printDocument.PrintPage += (sender, args) =>
{
args.PageVisual = image;
};
printDocument.Print("QrCode");
答案 0 :(得分:2)
我找到了解决方案。
在Silverlight 4中打印图像控件时,它会向打印机发送图像控件的“打印屏幕”,就像在UserControl中查找但在其源属性中设置图像一样。如果您生成两个100x100像素和1000x1000像素分辨率的位图并将它们放在100x100像素大小的图像控件中,则打印结果将与您预期的不同。
因此解决方案是生成高分辨率图像(或高级图像)并将其放入所需大小的图像控件中。
答案 1 :(得分:0)
在我打字的时候,你似乎遇到了一个解决方案,但无论如何我都要提交......
发生这种情况的原因是PrintDocument将基本上采用UIElement(您的图像),它通常会闪烁到96 DPI屏幕,并将其升级到适合打印的600 DPI。由于没有办法告诉这个高档操作如何处理平滑,你得到的是那种丑陋的模糊。
但是,如果您自己进行高档blit,则对图像应用相反的RenderTransform
,当PrintDocument放大图像时,结果将是您的高分辨率blit。
一旦你获得了QR码的高分辨率(基本上是600/96 =正常情况下的6.25倍),你就应用了一个缩放变换,将它的大小调整为相同的数量:
image.RenderTransform = new ScaleTransform {
ScaleX = 96.0 / 600.0,
ScaleY = 96.0 / 600.0
};
打印时,您应该看到锋利的边缘。
答案 2 :(得分:-1)
您是否尝试更改图形对象的平滑模式?
WriteableBitmap bitmap = new WriteableBitmap(width, height);
//write bitmap pixels
Image image = new Image(){Stretch = Stretch.None};
image.Source = bitmap;
image.Width = bitmap.PixelWidth;
image.Height = bitmap.PixelHeight;
//Print
PrintDocument printDocument = new PrintDocument();
printDocument.PrintPage += (sender, args) =>
{
//**Add this**
args.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
args.PageVisual = image;
};
printDocument.Print("QrCode");