2012-01-16 16 views
7

Estaba siguiendo el artículo this y obtuve mi lienzo para guardar, sin embargo, quiero extender la funcionalidad del código y guardar una parte particular de mi lienzo como imagen, en lugar de todo mi lienzo .Guardar un lienzo WPF como una imagen

Intenté configurar las propiedades rect.Offset y rect.Location pero la imagen siempre se guarda desde la esquina superior izquierda de mi lienzo.

¿Alguien sabe cómo puedo lograr mi funcionalidad deseada de una manera similar?

Gracias!

Respuesta

15

Un método simple sería utilizar un CroppedBitmap después de rendir todo el lienzo. Puede reutilizar el mismo RenderTargetBitmap si necesita varias imágenes.

RenderTargetBitmap rtb = new RenderTargetBitmap((int)canvas.RenderSize.Width, 
    (int)canvas.RenderSize.Height, 96d, 96d, System.Windows.Media.PixelFormats.Default); 
rtb.Render(canvas); 

var crop = new CroppedBitmap(rtb, new Int32Rect(50, 50, 250, 250)); 

BitmapEncoder pngEncoder = new PngBitmapEncoder(); 
pngEncoder.Frames.Add(BitmapFrame.Create(crop)); 

using(var fs = System.IO.File.OpenWrite("logo.png")) 
{ 
    pngEncoder.Save(fs); 
} 
+0

¡Impresionante! ¡Esto parece haber hecho el truco! –

0

Ver si esta solución funciona para usted.

Size size = new Size(width, height); 
canvas.Measure(size); 
canvas.Arrange(new Rect(X, Y, width, height)); 

//Save Image 
... 
... 

// Revert old position 
canvas.Measure(new Size()); 
+0

Esto no logrará lo que solicitó el OP porque el problema es que las coordenadas X, Y no se pueden especificar. Solo el ancho y la altura deseados. –

+0

Samuel tiene razón, puedo cambiar el tamaño de mi rectángulo, pero no puedo ubicarlo en otro lugar que no sea el punto de inicio predeterminado de la esquina superior izquierda ... –

+0

¿Qué configuró como su nuevo tamaño? – MyKuLLSKI

0

Mirando el enlace que ha publicado, obviamente puede elegir las coordenadas del objetivo representado aquí.

RenderTargetBitmap rtb = new RenderTargetBitmap((int)rect.Right, 
    (int)rect.Bottom, 96d, 96d, System.Windows.Media.PixelFormats.Default); 
+0

Esto no permite la especificación de las coordenadas iniciales X e Y, solo el ancho y la altura deseados. –

Cuestiones relacionadas