C #: Сохранение JPG по частям

В настоящее время я работаю над программным обеспечением для создания мозаики фотографий с открытым исходным кодом на C # ( Sourceforge Link ). Это программное обеспечение объединяет большое количество маленьких фотографий (плиток) в одно большое изображение.

Поскольку размер окончательного изображения обычно составляет 20 тыс. Пикселей, умноженных на 15 тыс. Пикселей, я сохраняю только карту расположения плиток в памяти. Для построения финального изображения я строю его по частям, а именно полосой из 8 строк (можно и любым другим числом).

В случае bmps эти данные можно легко сохранить по частям, сначала записав заголовок bmp, а затем добавив данные ARGB в этот файл.

Но полученные BMP слишком велики для дальнейшей обработки (например, передачи их какой-нибудь компании, занимающейся печатью плакатов). Поэтому я хотел бы сохранить эти большие изображения в формате jpgs на моем жестком диске.

Проблема заключается в том, что, поскольку файлы jpgs сжимаются, запись данных фрагментами представляется очень сложной задачей (обычная функция Bitmap.Save () сначала загружает в память полное изображение и поэтому неприменима), поскольку запись в чистом виде, несжатые данные RGB этого не сделают.

Базовая функциональность записи jpg в партии должна существовать, поскольку, насколько я знаю, алгоритм сжатия jpg работает с кусками или 8x8 пикселей.

Я просмотрел несколько библиотек изображений (FreeImage, GraphicsMagick, LibTiff.NET), чтобы найти решение этой проблемы, но не нашел ни одного.LibTiff в основном имеет желаемую функциональность, но только для формата изображений tiff.

Большое спасибо за вашу помощь! Макс

6
задан mgulde 25 November 2011 в 09:45
поделиться