Saya memiliki instance dari System.Drawing.Bitmap
dan ingin membuatnya tersedia untuk aplikasi WPF saya dalam bentuk a System.Windows.Media.Imaging.BitmapImage
.
Apa yang akan menjadi pendekatan terbaik untuk ini?
Bagaimana dengan memuatnya dari MemoryStream?
using(MemoryStream memory = new MemoryStream())
{
bitmap.Save(memory, ImageFormat.Png);
memory.Position = 0;
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = memory;
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();
}
ms.Seek(0, SeekOrigin.Begin);
sebelum pengaturanbi.StreamSource
. Saya menggunakan .NET 4.0.Berkat Hallgrim, ini kode yang saya dapatkan:
Saya juga akhirnya mengikat ke BitmapSource alih-alih BitmapImage seperti pada pertanyaan awal saya
sumber
DeleteObject
pada pegangan itu.BitmapSizeOptions.FromEmptyOptions()
, dan berfungsi dengan baik untuk situasi saya.Saya tahu ini telah dijawab, tetapi berikut adalah beberapa metode ekstensi (untuk .NET 3.0+) yang melakukan konversi. :)
dan kelas NativeMethods (untuk menenangkan FxCop)
sumber
Butuh beberapa waktu untuk membuat konversi berfungsi dengan baik, jadi inilah dua metode ekstensi yang saya buat:
sumber
Yang paling mudah adalah jika Anda bisa membuat bitmap WPF dari file secara langsung.
Kalau tidak, Anda harus menggunakan System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap.
sumber
sumber
Anda bisa membagikan pixeldata antara ruang nama kedua (Media dan Gambar) dengan menulis sumber bitmap kustom. Konversi akan terjadi segera dan tidak ada memori tambahan yang akan dialokasikan. Jika Anda tidak ingin secara eksplisit membuat salinan Bitmap Anda, ini adalah metode yang Anda inginkan.
sumber
Saya bekerja di vendor pencitraan dan menulis adaptor untuk WPF ke format gambar kami yang mirip dengan System.Drawing.Bitmap.
Saya menulis KB ini untuk menjelaskannya kepada pelanggan kami:
http://www.atalasoft.com/kb/article.aspx?id=10156
Dan ada kode di sana yang melakukannya. Anda perlu mengganti AtalaImage dengan Bitmap dan melakukan hal yang setara yang kami lakukan - itu seharusnya cukup mudah.
sumber
Pendapat saya tentang ini dibangun dari sejumlah sumber daya. https://stackoverflow.com/a/7035036 https://stackoverflow.com/a/1470182/360211
sumber
Saya sampai pada pertanyaan ini karena saya mencoba melakukan hal yang sama, tetapi dalam kasus saya Bitmap berasal dari sumber / file. Saya menemukan solusi terbaik seperti yang dijelaskan dalam tautan berikut:
http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.aspx
sumber