Afbeelding weergeven in Java

Ik wil een afbeelding weergeven, maar weet niet wat ik moet doen. Of ik wat bibliotheekbestanden moet installeren of dat het gewoon kan, weet ik niet. Eigenlijk wil ik beeldverwerking doen, maar eerst moet ik de beeldinvoer nemen en het beeld weergeven, dan kan ik het effect van beeldverwerking als uitvoer krijgen en beslissen of het (algoritme) correct is of niet. Ik heb alleen de eclipse geïnstalleerd. Ik heb ook op Google gezocht, maar wat ze ook suggereren, het werkt niet goed. Of ik moet iets installeren of niet.

Ik heb de volgende code geprobeerd:

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);
    }
}

Het toont gewoon een grafisch venster, maar kan de afbeelding “bishnu.jpg” niet tonen

Moet ik iets installeren in eclipse? Maar ik denk dat er niets hoeft te worden geïnstalleerd.


Antwoord 1, autoriteit 100%

Als je je code uitvoert, krijg ik een afbeelding te zien, nadat ik het pad heb aangepast. Kun je controleren of je afbeeldingspad correct is, probeer bijvoorbeeld een absoluut pad?


Antwoord 2, autoriteit 92%

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);
    }
}

Antwoord 3, autoriteit 31%

Als u afbeeldingen wilt laden / verwerken / weergeven, stel ik aan dat u een beeldverwerkingskader gebruikt. Marvin kunt u bijvoorbeeld gemakkelijk met slechts een paar regels broncode doen.

broncode:

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);
    }
}

Uitvoer:


Antwoord 4

Als beginneling merkte ik dat je de tekening die je maakt gemakkelijk kunt zien:

Broncode

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"));
    }
}

Uitvoer

Het produceert een afbeeldingsbestand onder de inhoud van uw projecten.

output-foto

Dan kun je zien wat er verandert na het toevoegen van tekencode in een klein venster, het is handiger dan een uitspringend frame / labelvenster te sluiten:

output-picture-in-editor

Hopelijk helpt het.

Other episodes