2012-05-31 27 views
9

Kaydedilen görüntüde daha küçük boyutlara sahip olmak istiyorum. Yeniden nasıl boyutlandırabilirim? Ben görüntüyü redering için bu kodu kullanın:Bitmap görüntüsünü yeniden boyutlandır

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); 

cevap

3

senin "yüzey" Does görsel yeteneği ölçekleme var? Görmezseniz bir Viewbox'a sarın, sonra Viewbox'ı istediğiniz boyuta getirin.

Yüzeyde Ölç ve Düzenle'yi çağırdığınızda, bitmap'in olmasını istediğiniz boyutu sağlamanız gerekir.

ViewBox kullanmak gibi bir şey için kodunuzu değiştirmek için aşağıdakileri yapın:

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

Bu, try-catch bloğu olmadan mükemmeldir. –

+0

Boyut bölümü önemlidir, 2 ints kullanarak birden çok eski yanıt buldum, ancak şimdi bir boyuta ihtiyacınız var. Fark ettiğin için teşekkürler, bazı sıkıntılar kaydettim. (Gelecekte izleyicilerin 2 ints kullanarak cevapları bilmesi için yorum yapması gerektiği şekilde yorumlanması gerekir) –

5

bir Bitmap yeniden boyutlandırmak için en kısa yolu istenen size (veya width and height) ile birlikte bir Bitmap-yapıcı onu geçmektir :

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

@Downvoter Lütfen açıkla – Breeze

+0

Benim için çalışmış. Birilerinin kötü davranışlarını telafi etmek için bir öneride bulunun. – srking

+0

Mükemmel bir şekilde çalıştı. – theMohammedA

İlgili konular