我试图抓住java 2d图形
我基本上得到了一个带有backgrounfd图像的JPanel,如下所示:
public MapFrame(Plotting pl){
this.pl =pl;
this.setPreferredSize(new Dimension(984,884));
this.setBorder(BorderFactory.createEtchedBorder());
try {
getFileImage("stars.jpg");
}
catch (Exception ex) {
}
this.addMouseMotionListener(this);
this.addMouseListener(this);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(bg, 0, 0, null);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(new Color(0x756b48));
g2d.drawLine(0,0,0,100);
}
private void getFileImage(String filePath) throws InterruptedException, IOException {
FileInputStream in = new FileInputStream(filePath);
byte [] b=new byte[in.available()];
in.read(b);
in.close();
bg=Toolkit.getDefaultToolkit().createImage(b);
MediaTracker mt=new MediaTracker(this);
mt.addImage(bg,0);
mt.waitForAll();
}
在绘画组件中,我想在一个循环中覆盖12x12像素的小图像,这些图像是从某些xml中得到的各种xy点。
似乎无法将图像覆盖在我的第一个
上我有点迷失在这里并且生锈了
任何帮助都是b gr8
答案 0 :(得分:0)
public void paintComponent(Graphics g) {
g.drawImage(bg, 0, 0, null);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(new Color(0x756b48));
g2d.drawLine(0,0,0,100);
for(SomeXMLObject o : yourXMLSource) {
g.drawImage(yourImage, o.x, o.y, null);
}
}
如果您已经这样做,请详细说明您的XML解析方式。然后,您还需要加载“12x12”图像。 SomeXMLObject
是一个包含从您的XML中提取的x
和y
变量的结构。
如果你在背景后调用g.drawImage(...):它将在背景后绘制,从而叠加。如果您需要,请务必加载png-24图像,以启用半透明区域。
答案 1 :(得分:0)
如果您想在不同的位置绘制图像,就像为不同的坐标多次调用Graphics.drawImage(Image, int, int, ImageObserver)
一样简单(如上一个答案所示)。
至于加载图片,我建议使用其中一种ImageIO.read
方法,而不是自己动手。
答案 2 :(得分:0)
您可能希望使用ImageIO library来加载图片。如果你有一个图像文件名,你需要做的就是加载它
BufferedImage bimg = ImageIO.load(new File(filename));
这比你上面的代码容易一些。
之后,就像其他人说你可以使用g.drawImage(bimg,x,y,this);
来实际绘制图像。
答案 3 :(得分:0)
哦亲爱的
我错误地将我的资源的文件名格式化了
我是什么驴子我认为所有好建议虽然是人