我想将计算机中的图像加载到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);
}
}
提前致谢
答案 0 :(得分:2)
要将图像加载到内存中,您可以使用ImageIO.read(File)
。要在之后编辑它,请通过调用createGraphics()
:
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 docs的read(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
方法。