在Android中的大图片合成-PNG(三) PNG合成

在图片合成上,我们需要合成N张PNG图片,合成时需要注意叠加的图片任就需要进行解压缩处理,保留IDAT数据即可。一行一行的读取,一行一行的操作,而且需要备份好原来合成前的行

合成图片最重要的是对透明度的处理,以免图片合成错误

for (AddFile addFile : addFileList) {
	if(currentLine >= addFile.positionY && currentLine < (addFile.positionY + addFile.imgHeigth)){
		for (int j = 0; j < addFile.imgWidth; j++) {
			if(addFile.colorPixel == 4){
				int pos1 = 1 + (j + addFile.positionX)*imgPixel;
				if(pos1 < 0 || (imgPixel == 3 && pos1+2 >= InflaterArray.length) || (imgPixel == 4 && pos1+3 >= InflaterArray.length)){break;}
				int pos2 = (currentLine - addFile.positionY) * (addFile.imgWidth * addFile.colorPixel + 1) + j * addFile.colorPixel + 1;
				int alpha1 = 0xFF;
				if (imgPixel == 4)
					alpha1 = b2i(InflaterArray[pos1 + 3]);
				int alpha2 = b2i(addFile.data[pos2 + 3]);
				int alpha3 = sature(alpha1, alpha2);
				
				InflaterArray[pos1] = (byte)sature(b2i(InflaterArray[pos1]) * (255 - alpha2) / 255, b2i(addFile.data[pos2]) * alpha2 / 255);
				++pos1; ++pos2;
				InflaterArray[pos1] = (byte)sature(b2i(InflaterArray[pos1]) * (255 - alpha2) / 255, b2i(addFile.data[pos2]) * alpha2 / 255);
				++pos1; ++pos2;
				InflaterArray[pos1] = (byte)sature(b2i(InflaterArray[pos1]) * (255 - alpha2) / 255, b2i(addFile.data[pos2]) * alpha2 / 255);
				++pos1; ++pos2;
				if (imgPixel == 4) InflaterArray[pos1] = (byte)alpha3;
			}
		}
	}
}

至此PNG图片的合成已经完成。如果大家有更好的方法,欢迎留言交流。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值