2012-05-31 28 views
9

Chcę mieć mniejszy rozmiar przy zapisanym obrazie. Jak mogę zmienić rozmiar? używam tego kodu do redering obrazu:Zmiana rozmiaru obrazu bitmapowego

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

Odpowiedz

3

Czy Twój "powierzchnia" visual mają możliwość skalowania? Jeśli nie, możesz go zawinąć w Viewbox, a następnie renderować Viewbox w żądanym rozmiarze.

Po wywołaniu Zmierz i ułóż na powierzchni, powinieneś podać rozmiar, który ma być bitmapą.

Aby użyć Viewbox zmienić swój kod do czegoś tak:

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

Jest to idealne rozwiązanie bez bloku try-catch. –

+0

Część Rozmiar jest ważna, znalazłem wiele starych odpowiedzi za pomocą 2 stron, ale teraz potrzebujesz rozmiaru. Dzięki, że to zauważyłeś, uratowałeś trochę kłopotów. (Komentowanie ze względu na przyszłych widzów, aby znać odpowiedzi przy użyciu 2 ints muszą być odpowiednio zmienione) –

5

Najkrótsza droga do zmiany rozmiaru bitmapy jest przekazanie go do bitmapy konstruktora razem z pożądanym size (lub width and height) :

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

@ Dvvvoter proszę wyjaśnić – Breeze

+0

Pracował dla mnie. Mieć upominek, aby zrekompensować złe zachowanie. – srking

+0

Działa doskonale. – theMohammedA

Powiązane problemy