I want to load an image from my computer into 2D Graphics so that I can edit it afterwards and then I want to add it to JPanel
. If you need to see my project I can
To load your image into the memory, you can use ImageIO.read(File)
. To edit it afterwards, obtain a Graphics2D instance from it by calling createGraphics()
:
BufferedImage img = ImageIO.read(yourFile);
Graphics2D g = img.createGraphics();
// Draw here on the graphics
g.dispose();
You can even turn on anti-alias by setting a RenderingHint before drawing:
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIASING_ON);
Then, to add it to a JPanel, create your custom JComponent and add an instance of that component to your 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);
}
}
please read this tutorials about Icon in Swing and your Image/ImageIcon would by placed to the JLabel, this way eliminated all troubles came from paint/paintComponents ...
For image loading you should use ImageIO
object with method read(File file)
see docs. Then you will get BufferedImage
instance of which you can make your changes through Graphics2D
instance which you'll obtain by calling createGraphics()
on the image instance see docs. Last thing, override method paintComponent()
from JPanel
or better JComponent
see docs and there you can draw your image on Graphics
instance which you'll get as parameter in paintComponent(Graphics g)
method by calling drawImage(Image img, int x, int y, ImageObserver observer)
see docs where ImageObserver
set to null
.