我的目的是在指定点绘制原始图像内的小图像。有没有办法只更改指定的行而不是重写所有原始图像行?我试图只编写子图像行,结果是可预测的:
ar.com.hjg.pngj.PngjOutputException: rows must be written in order: expected:0 passed:1781
答案 0 :(得分:2)
PNG格式使用zlib压缩。每行的压缩表示取决于前面的压缩数据,并且由于PNG过滤,也可以取决于前一行。因此,您必须阅读整个图像,更改要更改的行,然后重写整个图像。
理论上,通过在每行开始时刷新并重新启动压缩器,可以编写可编辑的PNG,但压缩比会受到影响。我不知道任何实际执行此操作的应用程序。您还必须将PNG过滤限制为仅需要访问前一行的NONE和SUB过滤器。
最好继续并重写整个图像。
答案 1 :(得分:0)
您可以使用pngw.writeRow(iLine, rowNum);
编写特定行,其中pngw是您的PngWriter,iLine是ImageLineInt,rowNum是您要写入的行的编号。