Ich habe eine Instanz von a System.Drawing.Bitmap
und möchte sie meiner WPF-App in Form von a zur Verfügung stellen System.Windows.Media.Imaging.BitmapImage
.
Was wäre der beste Ansatz dafür?
Wie wäre es mit Laden aus 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);
vor dem Einstellen hinzufügenbi.StreamSource
. Ich verwende .NET 4.0.Dank Hallgrim ist hier der Code, mit dem ich gelandet bin:
Am Ende habe ich mich auch an eine BitmapSource anstatt an ein BitmapImage gebunden, wie in meiner ursprünglichen Frage
quelle
DeleteObject
an diesem Griff.BitmapSizeOptions.FromEmptyOptions()
, und es funktioniert gut für meine Situation.Ich weiß, dass dies beantwortet wurde, aber hier sind einige Erweiterungsmethoden (für .NET 3.0+), die die Konvertierung durchführen. :) :)
und die NativeMethods-Klasse (um FxCop zu beschwichtigen)
quelle
Ich habe einige Zeit gebraucht, um die Konvertierung in beide Richtungen zum Laufen zu bringen. Hier sind die beiden Erweiterungsmethoden, die ich mir ausgedacht habe:
quelle
Am einfachsten ist es, wenn Sie die WPF-Bitmap direkt aus einer Datei erstellen können.
Andernfalls müssen Sie System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap verwenden.
quelle
quelle
Sie können die Pixeldaten einfach zwischen beiden Namespaces (Medien und Zeichnung) teilen, indem Sie eine benutzerdefinierte Bitmapsquelle schreiben. Die Konvertierung erfolgt sofort und es wird kein zusätzlicher Speicher zugewiesen. Wenn Sie keine explizite Kopie Ihrer Bitmap erstellen möchten, ist dies die gewünschte Methode.
quelle
Ich arbeite bei einem Imaging-Anbieter und habe einen Adapter für WPF für unser Image-Format geschrieben, der einer System.Drawing.Bitmap ähnelt.
Ich habe diese KB geschrieben, um sie unseren Kunden zu erklären:
http://www.atalasoft.com/kb/article.aspx?id=10156
Und da ist Code, der das macht. Sie müssen AtalaImage durch Bitmap ersetzen und das Gleiche tun, was wir tun - es sollte ziemlich einfach sein.
quelle
Meine Einstellung dazu basiert auf einer Reihe von Ressourcen. https://stackoverflow.com/a/7035036 https://stackoverflow.com/a/1470182/360211
quelle
Ich bin auf diese Frage gekommen, weil ich versucht habe, dasselbe zu tun, aber in meinem Fall stammt die Bitmap aus einer Ressource / Datei. Ich fand die beste Lösung wie im folgenden Link beschrieben:
http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.aspx
quelle