Direct2D-Bitmaps sind Hardwaregeräte-abhängige Ressourcen und im Allgemeinen nicht leicht von der CPU-Seite des Systems aus zugänglich. Es ist daher schwierig, die Pixel der ID2D1Bitmap
zu erreichen, sie ist nicht entworfen und soll auch nicht auf diese Weise verwendet werden. Jeder Mechanismus, der rohe Bytes aus einer Direct2D-Bitmap erhält, erstellt dies normalerweise, indem er eine WIC-Bitmap daraus erstellt, um auf den Byte-Stream zuzugreifen. Auf diese Weise können Sie es in eine Datei oder sogar in ein Byte-Array schreiben und mit einem Interop in C# darauf zugreifen. Wenn Sie es in eine Datei schreiben und in WPF lesen möchten, funktioniert dieser Mechanismus. Wenn Sie die Bitmap-Daten in einem IWICBitmapSource
-Objekt während der Verarbeitung haben und wenn Sie es zwischenspeichern können, wäre der Auftrag einfacher. Umwandlung einer System.Drawing.Bitmap
in eine System.Windows.Media.ImageSource
wird hier beantwortet: Converting Bitmap to ImageSource (Dank @MSL, die die obige Antwort in den Kommentaren hingewiesen).
An dieser Stelle ist die Art, wie Sie es verwenden, etwas unklar, ein bisschen mehr Informationen über den beabsichtigten Gebrauch oder eine kurze Probe würde hier wirklich helfen.
EDIT 1: einen Blick auf dieses SO Qn Nehmen: Save ID2D1Bitmap to file und die Kommentare für eine Version von Code, der eine ID2D1Bitmap
in eine Datei speichert. Es führt im Wesentlichen die Umwandlung zu IWICBitmap
durch und schreibt es in eine Datei aus. Da IWICBitmap
in diesem Schritt von IWICBitmapSource
erbt, können Sie sogar die CopyPixels()
-Methode verwenden, um die Bitmap-Daten in ein Bytearray auszugeben, falls Sie dies wünschen.
Nun, wenn Sie mit dem Ansatz werden in eine Datei zu speichern, ein System.Drawing.Bitmap
bekommen ist so einfach wie:
bitmap = new Bitmap("<YOUR_BITMAP_FILENAME>")
Und Sie können es zu einem Bitmap für die Verwendung in WPF konvertieren, wie:
using(MemoryStream memstream = new MemoryStream())
{
bitmap.Save(memstream, ImageFormat.Bmp);
memstream.Position = 0;
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = memstream;
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();
}
Vielleicht kann Ihnen das helfen. [Konvertieren von Bitmap zu ImageSource] (http://stackoverflow.com/questions/26260654/wpf-converting-bitmap-to-imagesource) – MSL
Haben Sie gesehen: https://github.com/Microsoft/WPFDXInterop, und Sie tun Haben Sie einen Beispielcode, mit dem wir spielen können? –
Warum antwortest du nicht Leuten, die versuchen zu helfen? –