2016-07-21 4 views
1

Mit der Methode this möchte ich eine Leinwand in eine Bitmap rendern.Warum ist meine Shapes.Line doppelt so groß, wie ich es auf Canvas haben möchte?

Wenn ich eine Shape zu Canvas hinzufüge, wird es doppelt so groß wie angegeben. (0 0) bis (50; 50) auf einer Leinwand von Größe 200 bis 200.

public bool exportToBmp(string path, int dpi = 96) 
    { 
     if (path == null) 
      return false; 

     var canvas = new System.Windows.Controls.Canvas(); 

     // This diagonal Line should span a quarter of the rendered Image 
     var myLine = new System.Windows.Shapes.Line(); 
     myLine.Stroke = System.Windows.Media.Brushes.LightSteelBlue; 
     myLine.X1 = 0; 
     myLine.X2 = 50; 
     myLine.Y1 = 0; 
     myLine.Y2 = 50; 
     myLine.StrokeThickness = 2; 
     canvas.Children.Add(myLine); 

     canvas.Height = 200; 
     canvas.Width = 200; 
     Size size = new Size(canvas.Width, canvas.Height); 

     canvas.Measure(size); 
     canvas.Arrange(new Rect(size)); 

     var width = (int)canvas.ActualWidth; 
     var height = (int)canvas.ActualHeight; 

     RenderTargetBitmap bmp = new RenderTargetBitmap(width, height, dpi, dpi, PixelFormats.Pbgra32); 
     bmp.Render(canvas); 

     PngBitmapEncoder image = new PngBitmapEncoder(); 
     image.Frames.Add(BitmapFrame.Create(bmp)); 
     using (Stream fs = File.Create(path)) 
     { 
      image.Save(fs); 
     } 

     return false; 
    } 

Das I gerenderten Bild erhalte 200 von

Im Beispiel unten, ich bin eine Linie von der Zeichnung 200 px groß, aber die Diagonale geht den ganzen Weg zu (100; 100)

output Bitmap

Was mache ich falsch?

Antwort

2

Wenn ich Ihren Code ausführen, sehe ich folgendes Bild (Grenze hinzugefügt, um Klarheit):

enter image description here

Gibst du ein DPI andere als 96?

Welche DPI-Einstellungen werden auf Ihrem Computer verwendet?

+0

Ja, ich verwende dpi = 200. –

+0

Es brachte mich auf die richtige Spur. Ich wusste nicht, dpi ändert tatsächlich den Inhalt des Bildes, ich dachte es nur angegeben, welche Größe das Bild auf dem Bildschirm bei 100% gerendert wird Zoom –

+0

Versuchen Sie mit DPI von 96, nicht 200. –

Verwandte Themen