Java生成png8位_用Java或Python将8位(16色调色板)PNG转换为正确的4位(16色调色板)?...

在PNG中,调色板总是以RGB8(每个index=color为3个字节)存储,具有任意数量的条目(最多256个)。如果您当前有一个8位图像和16个颜色调色板(总共16个条目),您不需要更改托盘,只需重新打包像素字节(每个字节两个索引)。如果是这样的话,我想您可以用PNGJ使用以下代码(未测试):public static void reencode(String orig, String dest) {

PngReader png1 = FileHelper.createPngReader(new File(orig));

ImageInfo pnginfo1 = png1.imgInfo;

ImageInfo pnginfo2 = new ImageInfo(pnginfo1.cols, pnginfo1.rows, 4, false,false,true);

PngWriter png2 = FileHelper.createPngWriter(new File(dest), pnginfo2, false);

png2.copyChunksFirst(png1, ChunksToWrite.COPY_ALL);

ImageLine l2 = new ImageLine(pnginfo2);

for (int row = 0; row < pnginfo1.rows; row++) {

ImageLine l1 = png1.readRow(row);

l2.tf_pack(l1.scanline, false);

l2.setRown(row);

png2.writeRow(l2);

}

png1.end();

png2.copyChunksLast(png1, ChunksToWrite.COPY_ALL);

png2.end();

System.out.println("Done");

}

在其他地方,如果您当前的托盘有16个“已使用”颜色(但它的长度更大,因为它包含未使用的颜色),您需要做一些工作,修改调色板块(但也可以这样做)。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值