2010-12-03 5 views
3

Ich möchte Writablebitmap zu JPEG-Stream konvertieren, und es sieht aus wie es auch keine Plattform-Unterstützung ist als ich ein paar Open-Source-Encoder-Bibliotheken auf Web sehen können, ich möchte Ihre Meinung bekommen, auf dem ist die empfohlene in Bezug auf Leistung und Zuverlässigkeit.Beste Jpeg-Encoder für Silverlight 4.0

Antwort

5

Ich habe ziemlich viel Zeit mit beiden FJCore und LibJpeg.Net verbracht. FJCore ist einfacher zu verwenden, da es von Java portiert wurde und ein Objektmodell aufweist, das dem ähnelt, was Sie in C# erwarten würden. Allerdings ist LibJpeg.NET bei weitem die komplette Bibliothek (es basiert auf der informell kanonischen libjpeg), und es ist ebenfalls deutlich schneller. Um ein Beispiel zu geben, verwendet FJCore eine naive Implementierung einer inversen diskreten Cosinus-Transformation, die etwa 1024 Multiplikationen und zusätzliche 1024 Additionen für jeden 8 × 8-Block umfasst. Im Gegensatz dazu verwendet LibJpeg.NET den Hochleistungs-AAN-Algorithmus, der nur 144 Multiplikationen und 464 Additionen benötigt (siehe http://datasheets.chipdb.org/Intel/x86/MMX/MMX/AP528.HTM#AAN Algorithm). Darüber hinaus ist FJCore ziemlich ineffizient in der Art und Weise, wie es Speicher verwendet und Objekte, die leicht wiederverwendet werden können, ständig neu erstellt. Zur gleichen Zeit, weil FJCore weniger Optimierungen hat, ist es wesentlich einfacher zu hacken.

Für mein aktuelles Projekt (das Schreiben eines Video-Codec für Silverlight), habe ich FJCore als Ausgangspunkt verwendet, eine ganze Reihe von Ineffizienzen behoben, seinen IDCT-Algorithmus durch den von LibJpeg.NET ersetzt und bin gelandet mit etwas, das mir ungefähr das 10-fache der ursprünglichen Leistung gab.

+0

Hallo Ken, können Sie Ihre aktualisierten Code FJCore Quelle teilen? Auch in Ihrer eigenen Erfahrung in beiden Bibliotheken in Bezug auf Qualität und Komprimierung, welche sind Ihrer Meinung nach besser? – cubski

+0

Als ich in meiner Antwort oben den Begriff "Hack" verwendete, machte ich keine Witze. Während ich versuchte, in der ursprünglichen FJCore-Bibliothek nichts zu kaputt zu machen, bestand mein Hauptanliegen darin, sie so zu modifizieren, dass sie in meinem Video-Codec im Motion JPEG-Stil funktioniert, was die Verwendung für andere Leute oder in anderen Situationen nicht einfach macht. Das heißt, sehen Sie diese Antwort (http://stackoverflow.com/questions/1773330/streaming-a-webcam-from-silverlight-4-beta) für einen Link zu einer etwas früheren Version meiner modifizierten Code. –

+0

Hallo Ken, ich nehme derzeit 10 fps von meiner Webcam-Anwendung und ich benutze FJcore für die Codierung. Ich bin mir nicht sicher, wie man die kodierten Frames zu mjpeg video zusammenstellt. Ich habe versucht, die Bytes aus den codierten Frames sequenziell zu einem Stream hinzuzufügen, um es auf der Festplatte zu speichern, ohne Erfolg. Kannst du mich auf den richtigen Weg bringen? Vielen Dank. – cubski

0

Ken warum nicht Sie Ihre aktualisierten Code an die FJCore Quelle einreichen?

http://code.google.com/p/fjcore/

+0

Entschuldigung, gerade jetzt entdeckt. Ich kann das noch tun, aber die meisten meiner Änderungen waren in Richtung Integration mit meiner Gesamtlösung, nicht in Richtung allgemein hilfreicher und allgemein anwendbarer Änderungen. Ich würde wahrscheinlich einige Tage brauchen, um die allgemeingültigen Änderungen an der FJCore-Bibliothek zurück zu portieren. Es ist etwas, was ich gerne machen würde, aber mein jetziges Startup hält mich ziemlich beschäftigt :-). –

Verwandte Themen