2015-01-23 2 views
0

Моя цель - рисовать маленькое изображение внутри исходного изображения в указанной точке. Есть ли способ изменить только указанные строки и не переписывать все изображения исходного изображения? Я попытался написать только строки подстроек, и результат был предсказуемым:PNGj: Порядок написания строк

ar.com.hjg.pngj.PngjOutputException: rows must be written in order: expected:0 passed:1781 

ответ

2

Формат PNG использует сжатие zlib. Сжатое представление каждой строки зависит от предыдущих сжатых данных и из-за фильтрации PNG, также может зависеть от предыдущей строки. Поэтому вы должны прочитать все изображение, изменить строки, которые хотите изменить, а затем переписать все изображение.

Теоретически можно написать PNG, который можно отредактировать, путем сброса и перезапуска компрессора в начале каждой строки, но в результате пострадает коэффициент сжатия. Я не знаю каких-либо приложений, которые на самом деле это делают. Вам также необходимо ограничить фильтрацию PNG только фильтрами NONE и SUB, которым не нужен доступ к предыдущей строке.

Лучше всего просто переписать и переписать все изображение.

0

Вы можете написать определенные строки, используя pngw.writeRow(iLine, rowNum);, где pngw - ваш PngWriter, iLine - это ImageLineInt, а rowNum - номер строки, которую вы хотите записать.

Смежные вопросы