Displaying Image in Java

I want to display an image but don't know what to do. Whether I have to install some library files or simply it can be done I don't know. Actually I want to do image processing, but first I have to take the image input and display image then I can get the effect of image processing as the output and decide whether it(algorithm) is correct or not. I have installed the eclipse only. I have searched in Google also but whatever they suggest is not working well. Either I have to install something or not.

I have tried the following code:

public class ImageTest { public static void main(String[] args){ EventQueue.invokeLater(new Runnable() { public void run(){ ImageFrame frame = new ImageFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } ); } } class ImageFrame extends JFrame{ public ImageFrame(){ setTitle("ImageTest"); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); ImageComponent component = new ImageComponent(); add(component); getContentPane().validate(); getContentPane().repaint(); } public static final int DEFAULT_WIDTH = 300; public static final int DEFAULT_HEIGHT = 200; } class ImageComponent extends JComponent{ private static final long serialVersionUID = 1L; private Image image; public ImageComponent(){ try{ File image2 = new File("bishnu.jpg"); image = ImageIO.read(image2); } catch (IOException e){ e.printStackTrace(); } } public void paintComponent (Graphics g){ if(image == null) return; int imageWidth = image.getWidth(this); int imageHeight = image.getHeight(this); g.drawImage(image, 50, 50, this); for (int i = 0; i*imageWidth <= getWidth(); i++) for(int j = 0; j*imageHeight <= getHeight();j++) if(i+j>0) g.copyArea(0, 0, imageWidth, imageHeight, i*imageWidth, j*imageHeight); } } 

It simply shows a graphical window but can't show the image "bishnu.jpg"

Should I install anything in eclipse? But I think nothing needs to install.

2

4 Answers

import java.awt.FlowLayout; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ public class DisplayImage { public static void main(String avg[]) throws IOException { DisplayImage abc=new DisplayImage(); } public DisplayImage() throws IOException { BufferedImage img=ImageIO.read(new File("f://images.jpg")); ImageIcon icon=new ImageIcon(img); JFrame frame=new JFrame(); frame.setLayout(new FlowLayout()); frame.setSize(200,300); JLabel lbl=new JLabel(); lbl.setIcon(icon); frame.add(lbl); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } 

Running your code shows an image for me, after adjusting the path. Can you verify that your image path is correct, try absolute path for instance?

2

If you want to load/process/display images I suggest you use an image processing framework. Using Marvin, for instance, you can do that easily with just a few lines of source code.

Source code:

public class Example extends JFrame{ MarvinImagePlugin prewitt = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.edge.prewitt"); MarvinImagePlugin errorDiffusion = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.halftone.errorDiffusion"); MarvinImagePlugin emboss = MarvinPluginLoader.loadImagePlugin("org.marvinproject.image.color.emboss"); public Example(){ super("Example"); // Layout setLayout(new GridLayout(2,2)); // Load images MarvinImage img1 = MarvinImageIO.loadImage("./res/car.jpg"); MarvinImage img2 = new MarvinImage(img1.getWidth(), img1.getHeight()); MarvinImage img3 = new MarvinImage(img1.getWidth(), img1.getHeight()); MarvinImage img4 = new MarvinImage(img1.getWidth(), img1.getHeight()); // Image Processing plug-ins errorDiffusion.process(img1, img2); prewitt.process(img1, img3); emboss.process(img1, img4); // Set panels addPanel(img1); addPanel(img2); addPanel(img3); addPanel(img4); setSize(560,380); setVisible(true); } public void addPanel(MarvinImage image){ MarvinImagePanel imagePanel = new MarvinImagePanel(); imagePanel.setImage(image); add(imagePanel); } public static void main(String[] args) { new Example().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } 

Output:

enter image description here

3

As a beginer, I found that is easy to see the picture you draw:

Source code

public class CheckCodeTest { private int width = 100, height = 50; private BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); @Test public void drawGraphicsTest() throws IOException { Graphics graphics = image.createGraphics(); // draw an orange rectangle graphics.setColor(Color.orange); graphics.fillRect(0,0,width,height); // layout the picture right now! graphics.drawImage(image,0,0,null); ImageIO.write(image, "png", new File("checkcode.png")); } } 

Output

It produce a picture file under your projects content.

output-picture

Then you can see what change after adding draw code in small window, it is more convenient than closing an jump-out Frame / Label window:

output-picture-in-editor

Hope it helps.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like