【发布时间】:2017-05-10 01:07:15
【问题描述】:
我有一个 BufferedImage,我正在尝试用透明像素填充一个矩形。问题是,透明像素并没有替换原始像素,而是在顶部并且什么都不做。我怎样才能完全摆脱原始像素?该代码适用于任何其他不透明颜色。
public static BufferedImage[] slice(BufferedImage img, int slices) {
BufferedImage[] ret = new BufferedImage[slices];
for (int i = 0; i < slices; i++) {
ret[i] = copyImage(img);
Graphics2D g2d = ret[i].createGraphics();
g2d.setColor(new Color(255, 255, 255, 0));
for(int j = i; j < img.getHeight(); j += slices)
g2d.fill(new Rectangle(0, j, img.getWidth(), slices - 1));
g2d.dispose();
}
return ret;
}
public static BufferedImage copyImage(BufferedImage source){
BufferedImage b = new BufferedImage(source.getWidth(), source.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics g = b.getGraphics();
g.drawImage(source, 0, 0, null);
g.dispose();
return b;
}
【问题讨论】:
-
你必须设置一个合适的
AlphaComposite。我不确定这个问题是否有 exact 重复,但请查看stackoverflow.com/a/6297069/3182664(忽略那里接受的答案。正确的方法是使用AlphaComposite,如我链接到的答案) -
@Marco13 谢谢,效果很好!也许将其作为答案发布,以便我接受?
-
@minerguy31 你可以自己回答,因为答案不是完全被接受的重复答案
标签: java bufferedimage