我有一个完整透明背景的图像。然而,当我画这个图像时,它有一种阴影,我不知道为什么。我想从那里得到它。有没有人有想法?我显然没有发布它的图像的声誉......所以我会尝试提供更多信息。 我将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个链接
你可以在这个链接上看到效果,它是具有完全透明背景的图像,被多次绘制。
答案 0 :(得分:1)
我无法判断这是否是问题的确切原因,因为您还没有提供MCVE但此方法
public void renderChip(Chip chip, int x, int y) {
g.drawImage(chip.getImage(), x, y, null);
}
看起来错误。所有自定义绘制都应在覆盖的paintComponent
方法中的提供的 Graphics对象的上下文中完成。如果您未在paintComponent
或JPanel
中覆盖JComponent
,那么您可能无法正确绘画。您可能正在做类似
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);
}
}
}