2009-07-13 30 views

Trả lời

16

Bạn có thể sử dụng thuộc tính Nguồn của hình ảnh. Hãy thử mã này ...

ImageSource imageSource = new BitmapImage(new Uri("C:\\FileName.gif")); 

image1.Source = imageSource; 
+38

Ông đã có bitmap trong bộ nhớ, vì vậy ông không thể sử dụng một uri –

+0

Tôi có đối tượng Bitmap, actully nó được tạo ra từ một thiết bị quét, vì vậy tôi không thể tham khảo bất kỳ vị trí –

+0

tôi có một phương thức trả về hình ảnh bitmap. làm thế nào để thiết lập nó như là nguồn –

83

Theo http://khason.net/blog/how-to-use-systemdrawingbitmap-hbitmap-in-wpf/

[DllImport("gdi32")] 
    static extern int DeleteObject(IntPtr o); 

    public static BitmapSource loadBitmap(System.Drawing.Bitmap source) 
    { 
     IntPtr ip = source.GetHbitmap(); 
     BitmapSource bs = null; 
     try 
     { 
      bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(ip, 
       IntPtr.Zero, Int32Rect.Empty, 
       System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()); 
     } 
     finally 
     { 
      DeleteObject(ip); 
     } 

     return bs; 
    } 

Nó được System.Drawing.Bitmap (từ WindowsBased) và chuyển nó thành BitmapSource, có thể được thực sự sử dụng như nguồn hình ảnh để kiểm soát hình ảnh của bạn trong WPF.

image1.Source = YourUtilClass.loadBitmap(SomeBitmap); 
+7

Thx Lars, nhưng tôi đã làm đơn giản hơn nhiều, BitmapImage bmpi = new BitmapImage(); bmpi.BeginInit(); bmpi.StreamSource = new MemoryStream (ByteArray); bmpi.EndInit(); image1.Source = bmpi; –

+3

Tuyệt vời. Bạn có thể thêm sollution của bạn như là một câu trả lời cho câu hỏi của riêng bạn. –

+0

Tôi không thấy phương thức BitmapImage.StreamSource. Prashant, bạn đã gõ gì sai sao? –

16

Thật dễ dàng cho tệp đĩa, nhưng khó hơn cho Bitmap trong bộ nhớ.

System.Drawing.Bitmap bmp; 
Image image; 
... 
MemoryStream ms = new MemoryStream(); 
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
ms.Position = 0; 
BitmapImage bi = new BitmapImage(); 
bi.BeginInit(); 
bi.StreamSource = ms; 
bi.EndInit(); 

image.Source = bi; 

Stealed here

+0

Thx, nhưng mã đã không đóng ms.I nghĩ rằng bạn sẽ sử dụng http://stackoverflow.com/a/1069509/6116637 – lindexi

+0

@lindexi Mặc dù 'MemoryStream' thực hiện' IDisposable', nó không yêu cầu phải được xử lý một cách rõ ràng vì nó không bọc bất kỳ tài nguyên không được quản lý nào. Nó giống như một mảng byte và cuối cùng sẽ được GC thu thập. – kennyzx

2

Tôi đã viết một chương trình với wpf và sử dụng cơ sở dữ liệu cho hiển thị hình ảnh và đây là mã của tôi:

SqlConnection con = new SqlConnection(@"Data Source=HITMAN-PC\MYSQL; 
             Initial Catalog=Payam; 
             Integrated Security=True"); 

SqlDataAdapter da = new SqlDataAdapter("select * from news", con); 

DataTable dt = new DataTable(); 
da.Fill(dt); 

string adress = dt.Rows[i]["ImgLink"].ToString(); 
ImageSource imgsr = new BitmapImage(new Uri(adress)); 
PnlImg.Source = imgsr; 
+2

Câu trả lời hay, nhưng tôi rất khuyên bạn nên gói các đối tượng Sql bằng cách sử dụng câu lệnh để chúng được xử lý khi bạn sử dụng chúng. –

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