我正在尝试在绘制Line2D line1的画布上加载jpg图像。我想在线下叠加图像,因为我试图在线做一个对称的数学问题。
我一直没有找到异常错误文件,但是我将我的图像放在java文件本身的主目录中。
任何人都可以帮忙吗?
public SliderControlPaintLine() {
JPanel controlPanel = new JPanel();
controlPanel.setLayout(new GridLayout(2,2));
getContentPane().add(controlPanel, BorderLayout.NORTH);
JLabel label1 = new JLabel("Translate(dx,dy): ");
JLabel label2 = new JLabel("Rotate(Theta,ox,oy): ");
JLabel label3 = new JLabel("Scale(sx,sy)x10E-2:");
controlPanel.add(label1);
slider1 = createSlider(controlPanel, JSlider.HORIZONTAL, 0, 300, 150, 100, 50);
slider2 = createSlider(controlPanel, JSlider.HORIZONTAL, 0, 300, 150, 100, 50);
controlPanel.add(label2);
slider3 = createSlider(controlPanel, JSlider.HORIZONTAL, 0, 360, 0, 90, 45);
getContentPane().add(canvas);
try {
image = ImageIO.read(new FileInputStream("symmetry.jpg"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setSize(800,700);
setVisible(true);
}
我正在显示我声明并初始化ImageIO的位置。
class DrawingCanvas extends Canvas {
public DrawingCanvas() {
setSize(300, 300);
}
public void paint(Graphics g) {
super.paint(g);
g.drawImage(image, 0, 0, this);
Graphics2D g2D = (Graphics2D) g;
g2D.translate(transX, transY);
g2D.rotate(rotateTheta, rotateX, rotateY);
g2D.scale(scaleX, scaleY);
BasicStroke stroke = new BasicStroke(width);
g2D.setStroke(stroke);
Line2D line1 = new Line2D.Float(100f, 200f, 500f, 200f);
g2D.draw(line1);
}
}
答案 0 :(得分:0)
确保您当前的工作目录是带有图像文件的目录。您可以通过调用以下内容获取当前目录:
System.getProperty("user.dir")
您也可以使用绝对路径来确保正确的路径。 您可以通过以下方式获取程序的路径:
MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()
答案 1 :(得分:0)
你使用哪个IDE?您需要将symmetry.jpg文件放入工作目录。这主要在运行时设置中配置。
答案 2 :(得分:0)
try {
image = ImageIO.read(new File(getClass().getResource("symmetry.jpg").toURI()));
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
谢谢大家的评论。我设法使用它来显示图像。 :)
答案 3 :(得分:0)
尝试
ImageIO.write(new BufferedImage(10, 10, BufferedImage.TYPE_3BYTE_BGR), "jpg", new File("symmetry2.jpg"));
并查看文件的写入位置。这就是你必须放置symmetry.jpg
的地方