2013-01-16 69 views
17

Tôi muốn hiển thị hình ảnh nhưng không biết phải làm gì. Cho dù tôi phải cài đặt một số tập tin thư viện hoặc đơn giản nó có thể được thực hiện tôi không biết. Trên thực tế tôi muốn làm xử lý hình ảnh, nhưng trước tiên tôi phải lấy hình ảnh đầu vào và hiển thị hình ảnh sau đó tôi có thể có được hiệu quả xử lý hình ảnh như đầu ra và quyết định xem nó (thuật toán) là chính xác hay không. Tôi đã cài đặt nhật thực. Tôi cũng đã tìm kiếm trên Google nhưng bất kỳ điều gì họ đề xuất đều không hoạt động tốt. Hoặc là tôi phải cài đặt cái gì đó hay không. Tôi đã thử đoạn mã sau:Hiển thị hình ảnh trong Java

import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 

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

    } 

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

} 

Nó đơn giản chỉ ra một cửa sổ đồ họa nhưng không thể hiển thị hình ảnh "bishnu.jpg"

Tôi có nên cài đặt bất cứ điều gì trong nhật thực? Nhưng tôi nghĩ không có gì cần phải cài đặt.

+2

những gì bạn đã cố gắng ... xin vui lòng như vậy trong mã ... – Lionel

Trả lời

7

Chạy mã của bạn hiển thị hình ảnh cho tôi, sau khi điều chỉnh đường dẫn. Bạn có thể xác minh rằng đường dẫn hình ảnh của bạn là chính xác không, hãy thử đường dẫn tuyệt đối chẳng hạn?

+0

Thank you very much Tôi cũng đã đưa đường dẫn đầy đủ của hình ảnh sau đó nó hoạt động. Nhưng hình ảnh nằm trong cùng thư mục với mã, vì vậy nó không hoạt động (chỉ bằng tên của hình ảnh trong cùng thư mục với mã)? –

+0

Xem câu trả lời được chấp nhận trong chuỗi này để biết các mẹo về cách tải tài nguyên bằng cách sử dụng classpath: http://stackoverflow.com/questions/7014123/reading-an-image-in-netbeans/7014177#7014177. – OlavJ

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

Nếu bạn muốn tải/xử lý/hiển thị hình ảnh Tôi khuyên bạn nên sử dụng khung xử lý hình ảnh. Ví dụ: sử dụng Marvin, bạn có thể thực hiện điều đó dễ dàng chỉ với một vài dòng mã nguồn. đang

Nguồn:

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

+0

Sau khi tải xuống marvin1.5.1.jar từ sourceforge, ví dụ của bạn không thành công với java.io.FileNotFoundException:. \ Marvin \ plugins \ image \ org.marvinproject.image.edge.prewitt.jar (Hệ thống không thể tìm thấy đường dẫn được chỉ định) –

+0

@ AlexR: Tôi đoán bạn đã không cài đặt Marvin đúng cách. Bạn cần phải sao chép thư mục "marvin" vào thư mục gốc của dự án của bạn. Hãy xem hướng dẫn sau đây, nếu vấn đề vẫn tồn tại, bạn có thể tiếp cận các nhà phát triển trong nhóm thảo luận. http://marvinproject.sourceforge.net/en/tutorials/02_firstApplication/firstApplication.html –

Các vấn đề liên quan