2009-06-18 6 views
0

私はUriオブジェクトを使用して参照しているJPEGファイルを印刷しようとしていますが、いくつかの問題があります。イメージが印刷されている間に、それが少し切り取られ、反転されてミラーリングされていることがわかりました。私は作物が適切に設定されていないサイズによって引き起こされたと推測していますが、なぜそれが反転され、回転されているのか分かりません。これが自然な奇妙なものだったと仮定して、私はdrawingContextオブジェクトに変換を適用することで問題を解決しようとしましたが、空白のページが印刷されます。ここに私のコードです:Uriからイメージを印刷するにはどうすればよいですか?

public void Print(List<Uri> ListToBePrinted) 
{ 
    XpsDocumentWriter writer = 
     PrintQueue.CreateXpsDocumentWriter(this.SelectedPrinter.PrintQueue); 

    PrintCapabilities printerCapabilities = 
     this.SelectedPrinter.PrintQueue.GetPrintCapabilities(); 

    Size PageSize = 
     new Size(printerCapabilities.PageImageableArea.ExtentWidth, 
       printerCapabilities.PageImageableArea.ExtentHeight); 

    foreach (Uri aUri in ListToBePrinted) 
    { 
     BitmapImage anImage = new BitmapImage(aUri); 

     //create new visual which would be initialized by image 
     DrawingVisual drawingVisual = new DrawingVisual(); 

     //create a drawing context so that image can be rendered to print 
     DrawingContext drawingContext = drawingVisual.RenderOpen(); 

     // Flips along X and Y axis (flips and mirrors) 
     drawingContext.PushTransform(new ScaleTransform(-1, -1)); 

     drawingContext.DrawImage(anImage, new Rect(PageSize)); 

     drawingContext.Close(); 

     writer.Write(drawingVisual); 
    } 
} 

ご協力いただきありがとうございます - ありがとうございます!

答えて

2

は、ここで私がなってしまったものです:

public void Print(List<Uri> ListToBePrinted) 
{ 
    XpsDocumentWriter writer = 
     PrintQueue.CreateXpsDocumentWriter(this.SelectedPrinter.PrintQueue); 

    PrintCapabilities printerCapabilities = 
     this.SelectedPrinter.PrintQueue.GetPrintCapabilities(); 

    Size PrintableImageSize = 
     new Size(printerCapabilities.PageImageableArea.ExtentWidth, 
       printerCapabilities.PageImageableArea.ExtentHeight); 

    foreach (Uri aUri in ListToBePrinted) 
    { 
     DrawingVisual drawVisual = new DrawingVisual(); 

     ImageBrush imageBrush = new ImageBrush(); 
     imageBrush.ImageSource = new BitmapImage(aUri); 
     imageBrush.Stretch = Stretch.Fill; 
     imageBrush.TileMode = TileMode.None; 
     imageBrush.AlignmentX = AlignmentX.Center; 
     imageBrush.AlignmentY = AlignmentY.Center; 

     using (DrawingContext drawingContext = drawVisual.RenderOpen()) 
     { 
      // Flips along X and Y axis (flips and mirrors) 
      drawingContext.PushTransform(new ScaleTransform(-1, 1, PrintableImageSize.Width/2, PrintableImageSize.Height/2)); 
      drawingContext.PushTransform(new RotateTransform(180, PrintableImageSize.Width/2, PrintableImageSize.Height/2)); // Rotates 180 degree 

      drawingContext.DrawRectangle(imageBrush, null, new Rect(25, -25, PrintableImageSize.Width, PrintableImageSize.Height)); 
     } 

     writer.Write(drawVisual); 
    } 
} 

画像が少しあいまいですが、確かに許容可能です。なぜ私のイメージを反転またはミラーリングする必要があるのか​​まだ分かりません。

0

はあなたのような何かができる:

BitmapImage anImage = new BitmapImage(aUri); 

Image image = new Image(); 
image.BeginInit(); 
image.Source = anImage; 
image.EndInit(); 
image.Measure(PageSize); 
image.InvalidateVisual(); 

それは、Visualから派生したので、それからちょうどOnRenderが呼び出されるように、あなたはそれがなかった場合は、InvalidateVisualを呼び出す必要があり... をImageオブジェクトを印刷空白のイメージにつながる...

+0

これを実装しようとしましたが、空白のイメージがありました(image.InvalidateVisual()の有無にかかわらず)。 – Joel

関連する問題