java中图像的显示与写入
我无法显示图像,因为主方法存在问题,我不确定是否正确写入图像。对不起,我对Java真的很陌生java中图像的显示与写入,java,image,Java,Image,我无法显示图像,因为主方法存在问题,我不确定是否正确写入图像。对不起,我对Java真的很陌生 public class Display extends JPanel { String path = "C:/Users/asus/workspace/Code/src/7horses.jpg"; File file = new File(path); static BufferedImage img; img = ImageIO.read(new File(file)); public sta
public class Display extends JPanel
{
String path = "C:/Users/asus/workspace/Code/src/7horses.jpg";
File file = new File(path);
static BufferedImage img;
img = ImageIO.read(new File(file));
public static BufferedImage CopyImage (File file)
{
BufferedImage cImg = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics g = cImg.createGraphics();
g.drawImage(img, 0, 0, null);
g.dispose();
File saveImage = new File("C:/Users/asus/workspace/Code/src", saveAs);
ImageIO.write(cImg, "png", saveImage);
return cImg;
}
public static void main(String[] args)
{
JFrame f = new JFrame("Show Image");
LoadImage panel = new BufferedImage CopyImage(file);//
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(panel);
f.pack();
f.setLocation(200,200);
f.setVisible(true);
}
}
复制图像后,我不确定如何显示复制副本。下面是我最初用于加载和显示的代码
public class LoadImage extends JPanel
{
BufferedImage img;
String path = "C:/Users/asus/workspace/MP/src/7horses.jpg";
File file = new File(path);
public void paint(Graphics g)
{
g.drawImage(img, 0, 0, null);
}
public LoadImage()
{
try
{
img = ImageIO.read(file);
}
catch (IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
JFrame f = new JFrame("Show Image");
LoadImage panel = new LoadImage();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(panel);
f.pack();
f.setLocation(200,200);
f.setVisible(true);
}
}此代码有一些地方出错
和path
不能被file
访问,因为它们不是main()
而main是。这意味着当运行static
时,main()
或path
都不存在file
不是有效的Java-我不确定您想做什么,但我想您想删除LoadImage panel=new BuffereImage CopyImage(文件)
部分new BuffereImage
img=ImageIO.read(新文件(File))代码>-不能在方法或静态块之外运行此语句,因为它需要处理
IOException
ImageIO.read(新文件(File))代码>-
已经是文件
类型,您正在将其传递到类型文件
,这不是必需的<代码>ImageIO.read(文件)代码>可以吗文件
尚未在任何地方定义saveAs
可以抛出一个ImageIO.write(cImg,“png”,saveImage)
,因此您需要在它周围添加一个IOException
,就像在try catch
构造函数中一样,或者将LoadImage()
附加到方法签名中,就像这样throws IOException
public static BufferedImage CopyImage(文件文件文件)throws IOException
- 您正在引用
,它似乎正试图以稍微不同的方式执行LoadImage
的操作。我不确定这里该建议什么,因为我不明白其用意,但我想也许可以将Display
显示中的
替换为LoadImage
Display
- 使用
从文件中检索ImageIO
buffereImage
- 使用
,该面板可以使用缓冲图像在屏幕上显示 您的ImagePanel
JFrame
更像是这样:
什么是LoadImage?除非它同时是一个BuffereImage和一个容器,否则您的代码甚至无法编译。
由于一个类不能同时是一个容器和一个BuffereImage(假设两者都是类,而不是接口,并且Java中不存在类级别的多重继承),因此您的代码无法工作。
您必须弄清楚如何正确初始化LoadImage实例,只有该类的文档(可能还有源代码)才能帮助您。可能:
public class Display extends JPanel {
private static final long serialVersionUID = 1L;
private static final String path = "C:/Users/asus/workspace/Code/src/7horses.jpg";
private static final File file = new File(path);
public static void main(String[] args) throws IOException {
JFrame f = new JFrame("Show Image");
BufferedImage image = ImageIO.read(file);
ImagePanel panel = new ImagePanel(image);//
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(panel);
f.pack();
f.setLocation(200, 200);
f.setVisible(true);
}
public static class ImagePanel extends JPanel {
private static final long serialVersionUID = 1L;
private BufferedImage image;
public ImagePanel(BufferedImage image) {
this.image = image;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, null); // see javadoc for more info on the parameters
}
}
}
+0 ; 您不能
img=ImageIO.read(新文件(File))
?嗯,实际上,你可以staticbufferedimage img=ImageIO.read(新文件(File))
将完全按照它应该的方式工作,在这种情况下,您如何处理抛出的IOException
?要么提供一个包装器方法来抑制/处理异常,要么为此使用静态{}
块-无论如何,我没有指出您可以在初始值设定项中检查异常(因为out显然不能)-我指出,您可以在这样的方法块之外运行语句。将该语句重新表述为“你不能让一个方法调用在方法块之外抛出一个已检查的异常”将是OKI,我想这正是OP的想法——至少我理解他的意思。如果你也像罗斯·德鲁那样指出OPs代码中的错误,你就应该接受这一点。