我有3个BufferedImages:A,C和D.所有图像都带有颜色和alpha通道。 C必须使用alpha-over D,但使用A的透明层。这个想法是:
我使用new BufferedImage().createGraphics().drawImage(D).drawImage(C);
进行alpha混音。但是如何设置C的alpha?
我对使用BufferedImage的任何建议持开放态度,但我更喜欢那些不迭代所有像素并手动进行计算以提高性能的建议(希望它能够实现)。
答案 0 :(得分:0)
对于具有统一alpha的图像,您可以执行以下操作:
BufferedImage bim=null;
try {
bim=ImageIO.read(new File("..."));
}
catch (Exception ex) { System.err.println("error in bim "+ex); }
int wc=bim.getWidth(), hc=bim.getHeight();
BufferedImage b=new BufferedImage(wc, hc, BufferedImage.TYPE_INT_ARGB);
b.getGraphics().drawImage(bim, 0, 0, null);
BufferedImage b2=new BufferedImage(wc, hc, BufferedImage.TYPE_INT_ARGB);
RescaleOp no=new RescaleOp(new float[]{1f, 1, 1, 1f}, new float[]{0, 0, 0, -50}, null);
b2=no.filter(b, null);
BufferedImage b3=new BufferedImage(wc, hc, BufferedImage.TYPE_INT_ARGB);
b3.getGraphics().drawImage(bim, 0, 0, null);
float offset=(b2.getRGB(0, 0)&0xff000000)>>24, a=(b3.getRGB(0, 0)&0xff000000)>>24;
no=new RescaleOp(new float[]{1, 1, 1, 1}, new float[]{0, 0, 0, -a+offset}, null);
b3=no.filter(b3, null);
现在b3的alpha值为b2。
对于具有非均匀alpha的图像,您必须按像素工作像素。