2012-01-16 27 views
7

Tôi đã theo dõi this bài viết và tôi đã lưu canvas của mình, tuy nhiên, tôi muốn mở rộng chức năng của mã và lưu một phần cụ thể của canvas của tôi dưới dạng hình ảnh chứ không phải toàn bộ canvas .Tiết kiệm một khung WPF như một hình ảnh

Tôi đã thử đặt các thuộc tính rect.Offsetrect.Location nhưng hình ảnh luôn được lưu từ góc trên bên trái của canvas của tôi.

Có ai biết cách tôi có thể đạt được chức năng mong muốn của mình theo cách tương tự không?

Cảm ơn!

Trả lời

15

Phương pháp đơn giản là sử dụng CroppedBitmap sau khi hiển thị toàn bộ canvas. Bạn có thể tái sử dụng cùng một RenderTargetBitmap nếu bạn cần nhiều hình ảnh.

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

Tuyệt vời! Điều này dường như đã thực hiện các trick! –

0

Xem liệu giải pháp này có phù hợp với bạn hay không.

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

Điều này sẽ không đạt được những gì OP được yêu cầu do sự cố là không thể chỉ định tọa độ X, Y. Chỉ chiều rộng và chiều cao mong muốn. –

+0

Samuel đúng, tôi có thể thay đổi kích thước hình chữ nhật của mình, tuy nhiên tôi không thể định vị nó ở bất kỳ nơi nào khác ngoài điểm khởi đầu mặc định của góc trên bên trái ... –

+0

Bạn đã đặt làm kích thước mới của mình? – MyKuLLSKI

0

Nhìn vào liên kết bạn đã đăng, rõ ràng bạn có thể chọn tọa độ đích được hiển thị tại đây.

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

Điều này không cho phép đặc điểm kỹ thuật của tọa độ bắt đầu X và Y - chỉ chiều rộng và chiều cao mong muốn. –

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