2009-06-18 3 views
0

Я пытаюсь распечатать файл JPEG, который я ссылаюсь, используя объект Uri, и у меня возникают некоторые трудности. Я обнаружил, что пока изображение печаталось, оно слегка подрезалось и было перевернуто и зеркально отражено. Я предполагаю, что урожай был вызван тем, что размер не был установлен правильно, но понятия не имеет, почему он переворачивается и поворачивается. Предполагая, что это была естественная странность, я попытался решить проблему, применив преобразование к объекту 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(); 

Затем просто напечатать изображение объекта, так как это происходит от Визуальное ... Вам нужно позвонить InvalidateVisual так, что OnRender будет называться, если вы не сделали это приведет к пустой образ ...

+0

Я попытался реализовать это, но привел к пустому изображению (с изображением или без него. ИдентификацияVisual()). – Joel

Смежные вопросы