2009-10-29 8 views
6

Ich habe eine langsame Verbindung, die ich ein PNG-Bild über (als Byte-Stream) senden muss und das Bild sofort angezeigt werden. Ich habe eine C# WinForms-App, die das Byte [] akzeptiert, es in einen Speicherstream lädt und daraus ein System.Drawing.Image/Bitmap-Objekt erstellt.Wie kann ich ein interlaced PNG anzeigen, bevor alle Daten empfangen wurden?

Ich möchte ein Bild mit sehr niedriger Auflösung senden und es dann schrittweise aktualisieren, damit es klarer wird, wenn die Daten empfangen werden. Es sieht so aus, als ob PNG interlaced Bilder unterstützt, die genau das tun, was ich will.

Ist es möglich, das PNG zu zeigen, bevor alle Daten empfangen werden, und inkrementell zu verdeutlichen, wie der Rest davon kommt? Wie kann ich das machen?

Antwort

2

Sie müssten die Bytes so übergeben, dass sie der Adam7 algorithm entsprechen. Möglicherweise könnte eine 3rd-Party-Bibliothek gegoogelt werden, die die Bytes so liefert, dass die harte Arbeit daraus herauskommt.

Hier ist eine visual example von was es tun würde.

Bearbeiten: LibPNG for Windows might be a start. Natürlich würde seine DLL erfordern Ihr .NET-Programm mit nicht verwalteten Code und Nicht-MSIL-Assemblys zu interagieren, und das ist eine andere Geschichte, die sicherlich an anderer Stelle auf Stackoverflow gebucht ist - oder vielleicht könnten Sie speziell eine andere Frage für sie erstellen. LibPNG ist ein Open-Source-Projekt. Wenn Sie sich also den Quellcode anschauen, können Sie möglicherweise einen Einblick in den Adam7-Algorithmus erhalten, der in C#/.NET rekodiert werden könnte.

+0

Danke, ich hatte auf eine * automatische * Lösung gehofft, ich denke, es gibt keinen :( – NotDan

+0

Ich auch. Es scheint merkwürdig, dass es keine Implementierung gibt, die leicht googlefähig ist. Vielleicht werden Sie der erste sein. –

Verwandte Themen