Java:从文件加载图像,编辑并添加到JPanel

时间:2011-07-22 19:25:16

标签: java image swing jlabel

我想将计算机中的图像加载到2D图形中,以便我可以在之后编辑它然后将其添加到JPanel。如果您需要查看我的项目,我可以将其发送给您。

void loadImage()
{

    FileDialog fd = new FileDialog(new Frame(), "Please choose a file:", FileDialog.LOAD);
    fd.show();
    if (fd.getFile() != null)
    {
        File fil = new File(fd.getDirectory(), fd.getFile());
        strDirectory = fd.getDirectory();
        strFileType = fd.getFile();
        mainImage.setIcon(new ImageIcon(fil.toString()));
        getFileList(strDirectory);
        checkFileType(strFileType);
    }
}

提前致谢

3 个答案:

答案 0 :(得分:2)

要将图像加载到内存中,您可以使用ImageIO.read(File)。要在之后编辑它,请通过调用createGraphics()

从中获取Graphics2D实例
BufferedImage img = ImageIO.read(yourFile);
Graphics2D g = img.createGraphics();
// Draw here on the graphics
g.dispose();

您甚至可以通过在绘制前设置RenderingHint来打开消除锯齿:

g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
                   RenderingHints.VALUE_ANTIALIASING_ON);

然后,要将其添加到JPanel,请创建自定义JComponent并将该组件的实例添加到JPanel:

public class JImageComponent extends JComponent
{
    private BufferedImage img;

    public JImageComponent(BufferedImage bi)
    {
        img = bi;
    }

    @Override
    public void paintComponent(Graphics g)
    {
        g.drawImg(img, 0, 0, this);
    }

}

答案 1 :(得分:2)

请阅读本教程,了解Icon in Swing并将您的Image / ImageIcon置于JLabel,这样就消除了paint / paintComponents带来的所有麻烦......

答案 2 :(得分:1)

对于图片加载,您应该使用方法ImageIO see docsread(File file)对象。然后,您将获得BufferedImage个实例,您可以通过调用图片实例see docs上的Graphics2D获得createGraphics()实例进行更改。最后,从paintComponent()或更好JPanel see docs覆盖方法JComponent,然后您可以在Graphics实例上绘制您的图像,您将获得该图像作为参数通过调用paintComponent(Graphics g) see docs drawImage(Image img, int x, int y, ImageObserver observer)设置为ImageObserver的方式null方法。