J'ai une instance de a System.Drawing.Bitmap
et j'aimerais la mettre à la disposition de mon application WPF sous la forme d'un System.Windows.Media.Imaging.BitmapImage
.
Quelle serait la meilleure approche pour cela?
Que diriez-vous de le charger à partir de 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);
avant de réglerbi.StreamSource
. J'utilise .NET 4.0.Merci à Hallgrim, voici le code avec lequel je me suis retrouvé:
J'ai également fini par me lier à une BitmapSource au lieu d'une BitmapImage comme dans ma question d'origine
la source
DeleteObject
sur ce handle.BitmapSizeOptions.FromEmptyOptions()
, et cela fonctionne très bien avec ma situation.Je sais que cela a été répondu, mais voici quelques méthodes d'extension (pour .NET 3.0+) qui effectuent la conversion. :)
et la classe NativeMethods (pour apaiser FxCop)
la source
Il m'a fallu un certain temps pour que la conversion fonctionne dans les deux sens, voici donc les deux méthodes d'extension que j'ai trouvées:
la source
Le plus simple est de pouvoir créer directement le bitmap WPF à partir d'un fichier.
Sinon, vous devrez utiliser System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap.
la source
la source
Vous pouvez simplement partager les pixeldata entre les deux espaces de noms (Media et Drawing) en écrivant une bitmapsource personnalisée. La conversion se fera immédiatement et aucune mémoire supplémentaire ne sera allouée. Si vous ne souhaitez pas créer explicitement une copie de votre Bitmap, c'est la méthode que vous souhaitez.
la source
Je travaille chez un fournisseur d'imagerie et j'ai écrit un adaptateur pour WPF à notre format d'image qui est similaire à un System.Drawing.Bitmap.
J'ai écrit ce KB pour l'expliquer à nos clients:
http://www.atalasoft.com/kb/article.aspx?id=10156
Et il y a du code qui le fait. Vous devez remplacer AtalaImage par Bitmap et faire la même chose que nous faisons - cela devrait être assez simple.
la source
Mon point de vue sur cette construction à partir d'un certain nombre de ressources. https://stackoverflow.com/a/7035036 https://stackoverflow.com/a/1470182/360211
la source
Je suis venu à cette question parce que j'essayais de faire la même chose, mais dans mon cas, le bitmap provient d'une ressource / d'un fichier. J'ai trouvé que la meilleure solution est celle décrite dans le lien suivant:
http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.aspx
la source