gpt4 book ai didi

java - 透明度在java中不起作用

转载 作者:行者123 更新时间:2023-12-01 12:47:39 25 4
gpt4 key购买 nike

我有一个图像,具有完全透明的背景。然而,当我在游戏中绘制这张图像时,它有一种阴影,我不知道为什么。我想把它从那里拿出来。有人有想法吗?显然我没有发布它的图像的声誉......所以我会尝试提供更多信息。我将 Color.DARK_GRAY 作为背景,当我绘制图像时,您会看到它周围有一个浅灰色的正方形。然后,当我在彼此之上绘制几个这样的图像时,那个正方形变得越来越亮。

但是,如果我将图像绘制在另一个图像之上,则不会发生这种效果。

这里我加载图像

public BlackChip() {
this.value = 500;
this.url = "res/images/poker/blackchip.png";
this.file = new File(url);
BufferedImage bi;
try {
bi = ImageIO.read(file);
this.image = bi;
} catch (IOException e) {
e.printStackTrace();
}
}

这里我画了图像

public void renderChip(Chip chip, int x, int y) {
g.drawImage(chip.getImage(), x, y, null);
}

这里我称之为该方法

public void render() {
screen.renderBackground(Color.DARK_GRAY);
pokertable.render(Game.width / 2 - pokertable.getImage().getWidth(null) / 2, 50);
screen.renderChip(cs.getWhiteChip(), 380, 310);
screen.renderChip(cs.getRedChip(), 430, 310);
screen.renderChip(cs.getGreenChip(), 480, 310);
screen.renderChip(cs.getBlueChip(), 530, 310);
screen.renderChip(cs.getBlackChip(), 580, 310); //this one is it
}

图片链接:

https://drive.google.com/file/d/0Bz-4pfUssUeHRWkxaUhodWNILWc/edit?usp=sharing

嗯...这也不起作用,因为我需要 10 个声誉才能发布超过 1 个链接

你可以在这个链接上看到效果,它是全透明背景的图像,绘制了多次。

最佳答案

我无法判断这是否是问题的确切原因,因为您没有提供 MCVE但是这个方法

public void renderChip(Chip chip, int x, int y) {
g.drawImage(chip.getImage(), x, y, null);
}

只是看起来不对。所有自定义绘制都应在重写的 PaintComponent 方法中提供的 Graphics 对象的上下文中完成。如果您没有重写 JPanelJComponent 中的 paintComponent,那么您可能无法正确绘制。您可能正在做类似的事情

public class SomePanel extends JPanel {
private Graphics g;

public SomePanel() {
g = getGraphics();
}
}

这是完全错误的。你应该做类似的事情

public class SomePanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// do painting here
}
}

然后,您的类可以拥有自己的 render 方法,该方法将 Graphics 对象作为参数。然后就可以在paintComponent方法中调用。也许类似

public class Chip {
private JComponent imageObserver;
private BufferedImage chipImage;
int x, y;

public Chip(BufferedImage chipImage, int x, int y, JComponent imageObserver){
this.chipImage;
this.x = x;
this.y = y;
this.imageObserver = imageObserver;
}
public void renderChip(Graphics g) {
g.getImage(chipImage, x, y, imageObserver);
}
}

还有你的面板

public class SomePanel extends JPanel {
private List<Chip> chips;

public SomePanel() {
chips = new ArrayList<Chip>();
// add new Chips
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
for (Chip chip: chips) {
chip.renderChip(g);
}
}
}

关于java - 透明度在java中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24530693/

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