In WindowsForms world können Sie eine Liste der verfügbaren Bild-Encoder / Decoder mit
erhalten %Vor%Meine Frage ist, gibt es eine Möglichkeit, etwas analoges für die WPF-Welt zu tun, die es mir erlauben würde, eine Liste von verfügbaren
zu bekommen %Vor%Sie müssen .NET Reflection lieben. Ich habe im WPF-Team gearbeitet und kann mir nichts besseres vorstellen. Der folgende Code erstellt diese Liste auf meinem Computer:
%Vor%Es gibt einen Kommentar im Code, wo zusätzliche Assemblys hinzugefügt werden (wenn Sie beispielsweise Plugins unterstützen). Außerdem sollten Sie die Decoderliste filtern, um Folgendes zu entfernen:
%Vor%Eine komplexere Filterung mit Konstruktormusterabgleich ist möglich, aber ich habe keine Lust, sie zu schreiben. : -)
Alles, was Sie jetzt tun müssen, ist die Instanziierung der Encoder und Decoder, um sie zu verwenden. Sie können auch bessere Namen erhalten, indem Sie die Eigenschaft CodecInfo
der Encoder-Decoder abrufen. Diese Klasse wird Ihnen lesbare Namen unter anderen Fakten geben.
Hoffentlich korrigiert mich jemand, wenn ich falsch liege, aber ich denke nicht, dass es in WPF so etwas gibt. Aber hoffentlich ist dies einer der vielen Fälle, in denen Fortschritte in der Technologie veraltet sind, so wie wir es gewohnt sind, Dinge zu tun. Wie "wie wickle ich meine Digitaluhr?"
Nach meinem Verständnis ist der Grund, warum ImageCodecInfo.GetImageDecoders () in System.Drawing notwendig ist, mit der kludgy Natur von System.Drawing selbst zu tun: System.Drawing ist ein verwalteter Wrapper um GDI + herum, der ein nicht verwalteter Wrapper ist ein Teil der Win32-API. Es könnte also einen Grund geben, warum ein neuer Codec in Windows installiert wird, ohne dass .NET inhärent davon weiß. Und was von GetImageDecoders () zurückgegeben wird, ist nur eine Reihe von Zeichenfolgen, die normalerweise an System.Drawing / GDI + zurückgegeben werden und zum Suchen und Konfigurieren der entsprechenden DLL zum Lesen / Speichern Ihres Abbilds verwendet werden.
Auf der anderen Seite sind in WPF die Standard-Encoder und -Decoder in das Framework integriert, und wenn ich mich nicht irre, sind Sie nicht auf etwas angewiesen, das nicht garantiert ist, dass es als Teil des Rahmen. Die folgenden Klassen erben von BitmapEncoder und sind standardmäßig mit WPF verfügbar: BmpBitmapEncoder, GifBitmapEncoder, JpegBitmapEncoder, PngBitmapEncoder, TiffBitmapEncoder, WmpBitmapEncoder. Es gibt BitmapDecoder für alle die gleichen Formate plus IconBitmapDecoder und LateBoundBitmapDecoder.
Sie haben es vielleicht mit einem Fall zu tun, den ich mir nicht vorstelle, aber es scheint mir, dass es wahrscheinlich Ihre eigene benutzerdefinierte Klasse ist, wenn Sie eine Klasse verwenden müssen, die von BitmapEncoder erbt, aber nicht in WPF enthalten war Sie würden mit Ihrer Anwendung installieren.
Hoffe, das hilft. Wenn ich einen notwendigen Teil des Bildes vermisse, lass es mich wissen.