Как мне начать показ чересстрочного PNG до того, как все данные будут получены? - PullRequest
6 голосов
/ 29 октября 2009

У меня медленное соединение, мне нужно отправить изображение PNG поверх (в виде потока байтов) и немедленно отобразить изображение. У меня есть приложение C # WinForms, принимающее byte [], загружающее его в поток памяти и создающее из него объект System.Drawing.Image / Bitmap.

То, что я хотел бы сделать, это отправить изображение с очень низким разрешением, а затем постепенно обновлять его, чтобы оно стало более четким при получении данных. Похоже, PNG поддерживает чересстрочные изображения, которые делают то, что я хочу.

Можно ли начать показ PNG до того, как все данные будут получены, и постепенно сделать их более четкими по мере поступления остальной части? Как я могу это сделать?

1 Ответ

2 голосов
/ 30 октября 2009

Вам придется доставлять байты таким образом, чтобы они соответствовали алгоритму Adam7 . Возможно, сторонняя библиотека может быть Googled, которая доставляет байты таким образом, чтобы избавить от тяжелой работы.

Вот визуальный пример того, что он будет делать.

Редактировать : LibPNG для Windows может быть началом . Конечно, ее DLL потребует, чтобы ваша .NET-программа взаимодействовала с неуправляемым кодом и сборками, отличными от MSIL, и я уверен, что это еще одна история, опубликованная в другом месте в stackoverflow - или, возможно, вы могли бы создать для нее другой вопрос. LibPNG - проект с открытым исходным кодом, поэтому просмотр его исходного кода может дать представление об алгоритме Adam7, который можно перекодировать в C # /. NET.

...