【发布时间】:2015-03-22 14:37:57
【问题描述】:
目的是在某个指定区域的另一个图像内绘制一个小图像。是否有可能只更改指定的行并避免重写原始图像的整行?我试图只写子图像行,结果是可以预测的:
ar.com.hjg.pngj.PngjOutputException: rows must be written in order: expected:0 passed:1781
【问题讨论】:
标签: java image-processing png
目的是在某个指定区域的另一个图像内绘制一个小图像。是否有可能只更改指定的行并避免重写原始图像的整行?我试图只写子图像行,结果是可以预测的:
ar.com.hjg.pngj.PngjOutputException: rows must be written in order: expected:0 passed:1781
【问题讨论】:
标签: java image-processing png
PNG 格式使用 zlib 压缩。每行的压缩表示取决于前面的压缩数据,并且由于 PNG 过滤,也可以取决于前面的行。所以你必须读取整个图像,改变你想要改变的行,然后重写整个图像。
理论上,可以通过在每行的开头刷新并重新启动压缩器来编写可以编辑的 PNG,但压缩率会因此受到影响。我不知道有任何实际这样做的应用程序。您还必须将 PNG 过滤限制为 NONE 和 SUB 过滤器,它们不需要访问前一行。
最好直接重写整个图像。
【讨论】:
您可以使用pngw.writeRow(iLine, rowNum); 写入特定行,其中 pngw 是您的 PngWriter,iLine 是 ImageLineInt,rowNum 是您要写入的行号。
【讨论】: