c #: сохранение JPG по частям - PullRequest
6 голосов
/ 25 ноября 2011

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

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

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

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

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

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

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

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

1 Ответ

1 голос
/ 25 ноября 2011

Поскольку вы не упомянули OpenJPEG library, я подумал, что вы, возможно, пропустили его.

http://www.openjpeg.org/

Конечно, вам понадобятся обертки вокруг него, но я думаю, что вы можетедобиться того, что вы хотите сделать с помощью этой библиотеки.Но это не самое простое решение, я знаю.Если кто-то другой предложит более лучшее и простое предложение, вы можете пропустить эту библиотеку.

Редактировать: Это выглядит очень неполно, но может оказаться полезным, поскольку это код C #.http://www.codeproject.com/KB/graphics/SimpleJpeg.aspx

...