Tengo una instancia de a System.Drawing.Bitmap
y me gustaría ponerla a disposición de mi aplicación WPF en forma de a System.Windows.Media.Imaging.BitmapImage
.
¿Cuál sería el mejor enfoque para esto?
¿Qué hay de cargarlo desde 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);
antes de configurarbi.StreamSource
. Estoy usando .NET 4.0.Gracias a Hallgrim, aquí está el código con el que terminé:
También terminé vinculando a un BitmapSource en lugar de una BitmapImage como en mi pregunta original
fuente
DeleteObject
en ese identificador.BitmapSizeOptions.FromEmptyOptions()
, y funciona bien para mi situación.Sé que esto ha sido respondido, pero aquí hay un par de métodos de extensión (para .NET 3.0+) que hacen la conversión. :)
y la clase NativeMethods (para apaciguar a FxCop)
fuente
Me llevó algo de tiempo hacer que la conversión funcionara en ambos sentidos, así que aquí están los dos métodos de extensión que se me ocurrieron:
fuente
Lo más fácil es si puede hacer el mapa de bits WPF desde un archivo directamente.
De lo contrario, deberá usar System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap.
fuente
fuente
Puede compartir los datos de píxeles entre ambos espacios de nombres (Medios y Dibujo) escribiendo una fuente de mapa de bits personalizada. La conversión se realizará de inmediato y no se asignará memoria adicional. Si no desea crear explícitamente una copia de su mapa de bits, este es el método que desea.
fuente
Trabajo en un proveedor de imágenes y escribí un adaptador para WPF a nuestro formato de imagen que es similar a un System.Drawing.Bitmap.
Escribí este KB para explicárselo a nuestros clientes:
http://www.atalasoft.com/kb/article.aspx?id=10156
Y hay un código allí que lo hace. Debe reemplazar AtalaImage con Bitmap y hacer lo mismo que estamos haciendo: debería ser bastante sencillo.
fuente
Mi opinión sobre esto se basa en una serie de recursos. https://stackoverflow.com/a/7035036 https://stackoverflow.com/a/1470182/360211
fuente
Llegué a esta pregunta porque estaba tratando de hacer lo mismo, pero en mi caso el Bitmap es de un recurso / archivo. Encontré que la mejor solución es como se describe en el siguiente enlace:
http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.aspx
fuente