2016-05-02 10 views
-2

Ich möchte eine TIFF-Datei laden, die eine riesige Größe hat. Ich änderte Heap-Größe auf etwa 800 m, so wird Bild geladen, aber es ist nicht richtig dargestellt:tiff Bild zeigt nicht richtig

  1. Das ist mein tatsächliches Bild: img1

  2. Dies ist Screenshot Bild, das ich habe, nachdem es geladen wird: img2

Dies ist mein Code, um die tIFF-Datei zu laden:

private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) { 
    JFileChooser fc = new JFileChooser(Database.basePath); 

    FileNameExtensionFilter extensionFilter = new FileNameExtensionFilter("TIF Files", "tif"); 
    fc.setFileFilter(extensionFilter); 
    int res = fc.showOpenDialog(null); 
    File file = null; 
    // We have an image! 
    try { 
     if (res == JFileChooser.APPROVE_OPTION) { 
      file = fc.getSelectedFile(); 
      System.out.println(file.getAbsolutePath().toString().substring(0, 
        file.getAbsolutePath().toString().lastIndexOf("/"))); 
      path = file.getAbsolutePath().toString().substring(0, 
        file.getAbsolutePath().toString().lastIndexOf("/")); 
      basepath = file.getAbsolutePath().toString().replace(".tif", ".xml"); 
      System.out.println("path: " + basepath); 
      setTarget(file); 

      // System.out.println("canoic"+file.getCanonicalPath()); 
     } // Oops! 

     else { 
      JOptionPane.showMessageDialog(null, "You must select one image to be the reference.", "Aborting...", 
        JOptionPane.WARNING_MESSAGE); 
     } 

    } catch (Exception iOException) { 
    } 
public void setTarget(File reference) { 
    try { 
     targetImg = null; 
     System.out.println("in try" + reference.getAbsolutePath()); 
     targetFile = reference; 
     byte[] data = Files.readAllBytes(Paths.get(reference.getAbsolutePath())); 
     targetImg = rescale(data); 

    } catch (IOException ex) { 
     System.out.println("in Catch"); 
     Logger.getLogger(HelloWorld.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    panel_1.setLayout(new BorderLayout(0, 0)); 
    label = new JLabel(new ImageIcon(targetImg)); 
    JScrollPane scroll = new JScrollPane(label); 
    panel_1.add(scroll); 
    scroll.addMouseListener(this); 
    scroll.addMouseMotionListener(this); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLayout(new BorderLayout(0, 0)); 

    setVisible(true); 
} 
public BufferedImage rescale(byte[] originalImage) { 

    TiffDecoder decoder; 
    BufferedImage decodedImage = null; 
    try { 
     decoder = new TiffDecoder(originalImage); 
     decodedImage = decoder.read(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return decodedImage; 
}` 
+0

Bitte enthalten Code für 'setTarget' lesen Methode, wo Sie das Bild laden – Sanjeev

+0

Verwenden Sie 'ImageIO' API statt Bytes aus Datei lesen – Sanjeev

+0

Was ist in rescale? – Sanjeev

Antwort

0

Sie können Ihr Bild mit ImageIO#read

BufferedImage image = ImageIO.read(file); 

Und dann setzen dieses Bild ImageIcon

label = new JLabel(new ImageIcon(image)); 

Und Sie müssen setzen jai_imageio.jar in Ihrem Classpath

+0

Danke @Sanjeev –

+0

Ihr herzlich willkommen. Bitte akzeptieren Sie als Antwort/Abstimmung, wenn es Ihnen geholfen hat. – Sanjeev