2011-10-18 2 views
5

Silverlight 4 응용 프로그램에서 이미지 (QR 코드)를 인쇄하려고하는데 인쇄 할 때 이미지가 반전됩니다 (XPS 파일 프린터와 하드웨어 프린터를 모두 시도했습니다). 바코드 판독기로 읽을 수 없습니다.Silverlight 인쇄 앤티 앨리어싱

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

답변

2

해결책을 찾았습니다.

Silverlight 4에서 이미지 컨트롤을 인쇄 할 때 ImageControl은 이미지 컨트롤의 "인쇄 화면"이 아니라 UserControl에서 보이는 것처럼 원본 속성에 설정된 이미지를 프린터로 보냅니다. 100x100 픽셀 및 1000x1000 픽셀 해상도의 두 비트 맵을 생성하고이를 100x100 픽셀 크기의 이미지 컨트롤에 넣으면 인쇄 결과가 예상과 다를 수 있습니다.

그래서 해결책은 고해상도 이미지 (또는 고급 이미지)를 생성하여 원하는 크기의 이미지 컨트롤에 넣는 것입니다.

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

args.Graphics 속성이 없습니다. Silverlight에서는 System.Drawing.Drawing2D.SmoothingMode를 사용할 수 없습니다. –

+0

여기에 None 속성을 사용해 보셨습니까? http://10rem.net/blog/2010/05/01/crappy-image-resizing-in-wpf-try-renderoptions 비트 맵 스케일링 모드 관련이 있는지 모르겠습니다. 그냥 도움이 되려고. –

+0

Silverlight에서 System.Drawing.Drawing2D.SmoothingMode를 사용할 수 없습니다. 제공하신 링크는 WPF와 관련이 있습니다. –

0

그것은 내가 내 입력 된대로 솔루션 건너했지만, 어쨌든 제출 것 같다 ...

이런 일이 발생하는 이유는하는 PrintDocument는 본질적으로 UIElement에 (이미지)을 취할 것입니다 이는 일반적으로 96 DPI 화면에 블라이드되며, 인쇄에 적합한 600 DPI로 상향 조정됩니다. 이 고급 작업에는 매끄럽게 처리하는 방법을 알릴 방법이 없으므로 그게 못생긴 흐릿함입니다.

그러나 고급 blit을 직접 수행 한 다음 이미지에 반대 RenderTransform을 적용하면 PrintDocument가 이미지의 크기를 조정할 때 고해상도 블리트가 적용됩니다.

image.RenderTransform = new ScaleTransform { 
    ScaleX = 96.0/600.0, 
    ScaleY = 96.0/600.0 
}; 
: 당신이 당신의 고해상도 블리트 QR 코드의 (정상 본질적 96분의 600 = 6.25 배 큰) 일단

, 당신은 규모가가 동일한 양만큼 아래로 다시 크기 변환을 적용

인쇄 할 때 날카로운 모서리가 보입니다.

관련 문제