gpt4 book ai didi

java - BufferedImage 用透明像素填充矩形

转载 作者:行者123 更新时间:2023-11-30 02:32:41 24 4
gpt4 key购买 nike

我有一个 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,您至少有两个选择:

  1. 或者,按照建议使用 AlphaComposite.CLEAR,然后用任何颜色填充一个矩形,结果将是一个完全透明的矩形:

    Graphics2D g = ...;
    g.setComposite(AlphaComposite.Clear);
    g.fillRect(x, y, w, h);
  2. 或者,您可以使用 AlphaComposite.SRC,并用透明(或半透明,如果您喜欢)颜色进行绘制。这将替换目标处的任何颜色/透明度,结果将是一个完全具有指定颜色的矩形:

    Graphics2D g = ...;
    g.setComposite(AlphaComposite.Src);
    g.setColor(new Color(0x00000000, true);
    g.fillRect(x, y, w, h);

如果您只想删除目的地上的内容,第一种方法可能更快更容易。第二种更灵活,因为它允许用半透明甚至渐变或其他图像替换区域。

<小时/>

PS:(正如 Josh 在链接的答案中所说)如果您打算使用更多绘画,请不要忘记在完成后将合成重置为默认的 AlphaComposite.SrcOver相同的 Graphics2D 对象。

关于java - BufferedImage 用透明像素填充矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43882050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com