gpt4 book ai didi

java - clearRect 绘制黑色而不是透明

转载 作者:行者123 更新时间:2023-11-30 06:44:15 25 4
gpt4 key购买 nike

似乎 clearRect 没有将我的 BufferedImage 设置为透明而是黑色。创建一个新的 BufferedImage 可以,但我不想产生太多垃圾。我的国际象棋程序有以下代码:

//graphics
private Graphics2D g2d;

private Graphics2D gLayer1;
private Graphics2D gLayer2;
private Graphics2D gLayer3;

public BufferedImage imgLayer1;
private BufferedImage imgLayer2;
private BufferedImage imgLayer3;

private Game() throws IOException {

//initialize...

imgLayer1 = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);
gLayer1 = imgLayer1.createGraphics();

imgLayer2 = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);
gLayer2 = imgLayer2.createGraphics();

imgLayer3 = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);
gLayer3 = imgLayer3.createGraphics();
}

//main
public static void main(String[] args) throws IOException {

//initialize frame
}

public void run() {

while (isRunning) {

updateGraphicsLayer1();
updateGraphicsLayer2();
updateGraphicsLayer3();

repaint();
}
}

protected void paintComponent(Graphics g) {
g2d = (Graphics2D) g;

g.drawImage(imgLayer1, 0, 0, null);
g.drawImage(imgLayer2, 0, 0, null);
g.drawImage(imgLayer3, 0, 0, null);

g2d.dispose();
}

public void updateGraphicsLayer1() {
if (redrawLayer1) {

gLayer1.clearRect(0, 0, WIDTH, HEIGHT);

//draw this layer
}
}

public void updateGraphicsLayer2() {
if (redrawLayer2) {

gLayer2.clearRect(0, 0, WIDTH, HEIGHT);

//draw this layer
}
}

public void updateGraphicsLayer3() {
if (redrawLayer3) {

gLayer3.clearRect(0, 0, WIDTH, HEIGHT);

//draw this layer
}
}

这就是我得到的:

enter image description here

我必须做什么?如何清除图层,使它们透明?

最佳答案

所以,这就是我过去所做的...当我使用 swing 将 BufferedImage 绘制到 Component 时,我将单独设置像素颜色值。

同样的概念可以应用于清除BufferedImage。您可以通过调用bi.setRGB()来设置像素int[]。您需要提供相当多的参数来设置数组,但不用担心,我将逐一介绍。

bi.setRGB(intstartingX,intstartingY,intwidth,intheight,int[]sourceArray,intoffset,intscanSize);

在此实例中,startingX 和startingY 应为0。

宽度和高度是您所期望的(bi.getWidth()、bi.getHeight())

sourceArray 将是用 0 填充的 int[]

在本例中偏移量应为 0

scanSize 只是 bi.getWidth()

那么,让我们看一些代码来清除 BufferedImage

int[] pixels = new int[bi.getWidth()*bi.getHeight()];

Arrays.fill(pixels, 0);
bi.setRGB(0, 0, bi.getWidth(), bi.getHeight(), pixels, 0, bi.getWidth());

如果这不能清除您的 BufferedImage,那么您要么没有使用 BufferedImage.TYPE_INT_ARGB 创建 BufferedImage,要么您读取图像,它只是一个缺少 Alpha channel 的 24 位彩色图像

关于java - clearRect 绘制黑色而不是透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43922079/

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