2010-03-09 45 views
7

Có cách nào trong C# để thực hiện chuyển đổi này và ngược lại không?Chuyển đổi System.Drawing.Image thành System.Windows.Controls.Image?

Tôi có ứng dụng WPF có điều khiển Hình ảnh. Tôi đang cố lưu hình ảnh trong điều khiển đó vào Cơ sở dữ liệu SQL.

Trong Mẫu thực thể của tôi, kiểu dữ liệu của cột hình ảnh trong cơ sở dữ liệu của tôi là byte[]. Vì vậy, tôi đã tìm thấy một phương pháp để chuyển đổi một System.Drawing.Image thành byte[] và ngược lại. Nhưng tôi đã không tìm thấy một phương thức để chuyển đổi từ System.Windows.Controls.Image thành byte[].

Vì vậy, đó là lý do tại sao tôi cần thực hiện chuyển đổi ở trên.

Trả lời

3

Vâng, một là hình ảnh và một là điều khiển hiển thị hình ảnh, vì vậy tôi không nghĩ rằng có một chuyển đổi giữa hai hình ảnh. Nhưng, bạn có thể thiết lập Source of the ... Controls.Image là ... Drawing.Image của bạn.

Chỉnh sửa dựa trên bản cập nhật

Điều này làm những gì bạn cần - http://msdn.microsoft.com/en-us/library/ms233764%28VS.100%29.aspx

+0

Không thể làm điều đó ... bất kỳ ý tưởng nào? –

+0

Bạn có thể cung cấp thêm một số chi tiết về kịch bản của mình không? Tôi đang có một thời gian khó hiểu tại sao bạn cần phải làm điều này. –

+0

xem ở trên để biết thêm chi tiết –

10

Nếu bạn có một mảng byte đại diện cho một tập tin mà WPF có thể giải mã (bmp, jpg, gif, png, tif , ico), bạn có thể làm như sau:

BitmapSource LoadImage(Byte[] imageData) 
{ 
    using (MemoryStream ms = new MemoryStream(imageData)) 
    { 
     var decoder = BitmapDecoder.Create(ms, 
      BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad); 
     return decoder.Frames[0]; 
    } 
} 

Tương tự như vậy, để chuyển đổi nó trở lại, bạn có thể làm như sau:

byte[] SaveImage(BitmapSource bitmap) 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     var encoder = new BmpBitmapEncoder(); 
     encoder.Frames.Add(BitmapFrame.Create(bitmap)); 
     encoder.Save(ms); 

     return ms.GetBuffer(); 
    } 
} 
+0

bạn đã cứu mạng tôi – joshua

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