2012-05-31 49 views
9

Tôi muốn lưu kích thước hình ảnh nhỏ hơn. Làm cách nào để thay đổi kích thước? tôi sử dụng mã này cho redering hình ảnh:Thay đổi kích thước hình ảnh 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); 

Trả lời

3

Liệu "bề mặt" của bạn hình ảnh đều đã nhân rộng khả năng? Bạn có thể bọc nó trong Viewbox nếu không, sau đó render Viewbox ở kích thước bạn muốn.

Khi bạn gọi Đo và Sắp xếp trên bề mặt, bạn nên cung cấp kích thước bạn muốn bitmap.

Để sử dụng Viewbox, thay đổi mã của bạn để một cái gì đó như sau:

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

Điều này hoàn hảo nếu không có khối try-catch. –

+0

Phần Kích thước là quan trọng, tôi tìm thấy nhiều câu trả lời cũ bằng cách sử dụng 2 ints nhưng bạn cần một kích thước bây giờ. Cảm ơn bạn đã nhận thấy điều đó, đã lưu một số sự cố. (Nhận xét vì lợi ích của người xem trong tương lai để biết câu trả lời bằng cách sử dụng 2 ints cần phải được thay đổi tương ứng) –

5

Con đường ngắn nhất để thay đổi kích thước một Bitmap là để vượt qua nó để một Bitmap-constructor cùng với size mong muốn (hoặc width and height) :

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

@Downvoter vui lòng giải thích – Breeze

+0

Làm việc cho tôi. Có một upvote để bù đắp cho cách cư xử xấu của ai đó. – srking

+0

Làm việc hoàn hảo. – theMohammedA

Các vấn đề liên quan