我在Snake Clone游戏中使用动画。但基于图片的问题是图像没有透明度(请注意圆形图片的白色背景。编程方面,是否有一个修复程序可以包含这些绘制图像的透明度?
这是一张包含我的代码和程序输出的图片。
P.S。在旁注中,我决定粘贴直接链接而不是IMG代码,因为我似乎无法在StackOverFlow上显示它。我在IMG代码的前面加了一个感叹号,但它没有用,所以这里是直接链接。
答案 0 :(得分:7)
正如另一个答案所提到的,最简单的方法可能是简单地使用具有透明背景的PNG图像(您可以使用像GIMP这样的图像编辑器创建这些图像)。或者,如果您仅限于具有纯色背景的PNG图像,以下是如何将PNG中的给定颜色(例如白色)更改为透明的示例:
import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
public class SimpleFrame extends JFrame {
JPanel mainPanel = new JPanel() {
ImageIcon originalIcon = new ImageIcon("~/Pictures/apple.png");
ImageFilter filter = new RGBImageFilter() {
int transparentColor = Color.white.getRGB() | 0xFF000000;
public final int filterRGB(int x, int y, int rgb) {
if ((rgb | 0xFF000000) == transparentColor) {
return 0x00FFFFFF & rgb;
} else {
return rgb;
}
}
};
ImageProducer filteredImgProd = new FilteredImageSource(originalIcon.getImage().getSource(), filter);
Image transparentImg = Toolkit.getDefaultToolkit().createImage(filteredImgProd);
public void paintComponent(Graphics g) {
g.setColor(getBackground());
g.fillRect(0, 0, getSize().width, getSize().height);
// draw the original icon
g.drawImage(originalIcon.getImage(), 100, 10, this);
// draw the transparent icon
g.drawImage(transparentImg, 140, 10, this);
}
};
public SimpleFrame() {
super("Transparency Example");
JPanel content = (JPanel)getContentPane();
mainPanel.setBackground(Color.black);
content.add("Center", mainPanel);
}
public static void main(String[] argv) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
SimpleFrame c = new SimpleFrame();
c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c.setSize(280,100);
c.setVisible(true);
}
});
}
}
答案 1 :(得分:4)
请勿使用绘画来绘制图像。使用其他一些使用像Paint.net或Photoshop这样的alpha的程序......如果你要永远使用圆圈,那么你可以使用g.drawOval(x,y,w,h)。
答案 2 :(得分:1)
public BufferedImage makeTransparentImage(BufferedImage br) {
for (int i = 0; i < br.getHeight(); i++) {
for (int j = 0; j < br.getWidth(); j++) {
Color c = new Color(br.getRGB(j, i));
int r = c.getRed();
int b = c.getBlue();
int g = c.getGreen();
if ((r == 255 && b == 255 && g == 255)) {
System.out.println("r g b " + r + g + b);
br.setRGB(j, i, 0xFF000000);
}
}
}
return br;
}
答案 3 :(得分:0)
如果您绘制简单的图片, 我知道的最简单,最快的方式... 在Macrosoft PowerPoint中绘制图片,然后单击“另存为图片”以获取透明背景。接下来...
public class Node {
Image nodeImage[] = new Image[3];
public Node() {
try {
String address = "C:\\Users\\Desktop\\practice\\Simulation\\img\\";
nodeImage[0] = ImageIO.read(new File(address + "Node_noVehicle.png"));
nodeImage[1] = ImageIO.read(new File(address + "Node_setVehicle.png"));
nodeImage[2] = ImageIO.read(new File(address + "Node_inVehicle.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2dtemp = (Graphics2D) g.create();
g2dtemp.drawImage(Node.nodeImage[0],(int)x,(int)y,width,height,this);
}
}
Draw a picture in Macrosoft PowerPoint and click "Save as Picture" to get a transparent background.
答案 4 :(得分:-1)
像这样简单地使用ARGB类型
BufferedImage image = new BufferedImage(
width, height,
BufferedImage.TYPE_INT_ARGB);
我希望它能起作用。