Theo như tôi có thể nói là cách duy nhất để chuyển đổi từ BitmapSource để Bitmap là thông qua mã không an toàn ... Như thế này (từ Lesters WPF blog):Có cách nào tốt để chuyển đổi giữa BitmapSource và Bitmap?
myBitmapSource.CopyPixels(bits, stride, 0);
unsafe
{
fixed (byte* pBits = bits)
{
IntPtr ptr = new IntPtr(pBits);
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(
width,
height,
stride,
System.Drawing.Imaging.PixelFormat.Format32bppPArgb,ptr);
return bitmap;
}
}
Để làm điều ngược lại:
System.Windows.Media.Imaging.BitmapSource bitmapSource =
System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
bitmap.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
Có cách nào dễ dàng hơn trong khung công tác không? Và lý do tại sao nó không có trong đó (nếu nó không)? Tôi nghĩ nó khá khả dụng.
Lý do tôi cần là vì tôi sử dụng AForge để thực hiện các hoạt động hình ảnh nhất định trong ứng dụng WPF. WPF muốn hiển thị BitmapSource/ImageSource nhưng AForge hoạt động trên Bitmap.
Để làm ngược lại, bạn * thực sự * ** phải ** xóa xử lý bitmap bạn nhận được bằng 'GetHbitmap'. Lỗi này là tất cả trên internet. Nó không thể sửa được. Thế giới đang dần dần rò rỉ xử lý GDI; chúng tôi sẽ sớm bơi trong họ! –
Thx, để chỉ ra :) – JohannesH
romkyns đề cập đến điều này: http://stackoverflow.com/questions/1546091/wpf-createbitmapsourcefromhbitmap-memory-leak –