2012-05-31 17 views
9

Voglio avere una dimensione più piccola all'immagine salvata. Come posso ridimensionarlo? Io uso questo codice per redering l'immagine:Ridimensiona immagine bitmap

Size size = new Size(surface.Width, surface.Height); 
surface.Measure(size); 
surface.Arrange(new Rect(size)); 
// Create a render bitmap and push the surface to it 
RenderTargetBitmap renderBitmap = 
    new RenderTargetBitmap(
     (int)size.Width, 
     (int)size.Height, 96d, 96d, 
     PixelFormats.Default); 
renderBitmap.Render(surface); 

BmpBitmapEncoder encoder = new BmpBitmapEncoder(); 
// push the rendered bitmap to it 
encoder.Frames.Add(BitmapFrame.Create(renderBitmap)); 
// save the data to the stream 
encoder.Save(outStream); 

risposta

3

Il vostro "superficie" visiva hanno scalare capacità? È possibile avvolgerlo in una Viewbox se non lo è, quindi eseguire il rendering della Viewbox alla dimensione desiderata.

Quando si chiama Misura e Disponi in superficie, è necessario specificare la dimensione desiderata per la bitmap.

Per utilizzare il Viewbox, modificare il codice a qualcosa di simile al seguente:

Viewbox viewbox = new Viewbox(); 
Size desiredSize = new Size(surface.Width/2, surface.Height/2); 

viewbox.Child = surface; 
viewbox.Measure(desiredSize); 
viewbox.Arrange(new Rect(desiredSize)); 

RenderTargetBitmap renderBitmap = 
    new RenderTargetBitmap(
    (int)desiredSize.Width, 
    (int)desiredSize.Height, 96d, 96d, 
    PixelFormats.Default); 
renderBitmap.Render(viewbox); 
30
public static Bitmap ResizeImage(Bitmap imgToResize, Size size) 
{ 
    try 
    { 
     Bitmap b = new Bitmap(size.Width, size.Height); 
     using (Graphics g = Graphics.FromImage((Image)b)) 
     { 
      g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
      g.DrawImage(imgToResize, 0, 0, size.Width, size.Height); 
     } 
     return b; 
    } 
    catch 
    { 
     Console.WriteLine("Bitmap could not be resized"); 
     return imgToResize; 
    } 
} 
+1

Questo è perfetto senza il blocco try-catch. –

+0

La parte Size è importante, ho trovato più vecchie risposte usando 2 ints ma ora hai bisogno di una dimensione. Grazie per aver notato che, salvato qualche problema. (Si prega di modificare i commenti degli spettatori futuri per conoscere le risposte usando i 2 ints di conseguenza) –

5

La via più breve per ridimensionare una bitmap è di passare a una bitmap costruttore insieme al size desiderato (o width and height) :

bitmap = new Bitmap(bitmap, width, height); 
+1

@Downvoter si prega di spiegare – Breeze

+0

Ha funzionato per me. Avere un upvote per compensare le cattive maniere di qualcuno. – srking

+0

ha funzionato perfettamente. – theMohammedA

Problemi correlati