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