2015-08-25 2 views
0

У меня есть изображение jpeg2000, img.jp2 в файле и на объекте DataInputStream imgobj в моем проекте и хочу показать это изображение на JFrame.Как показать изображение jpeg2000 на Jframe?

В старой версии jai_imageio-1.1.jar рекомендуется here и в библиотеке jj2000.

Я пробовал:

j2kImageReader.setInput(new FileImageInputStream(new File(fileName))); 
      ImageReadParam imageReadParam = j2kImageReader.getDefaultReadParam(); 
imageReadParam.setSourceRegion(new Rectangle(0, 0, 300, 300)); 
      IIOImage image = j2kImageReader.readAll(0, imageReadParam); 

     // This type of images is difficult to handle, 
     // I just don't know what to do with IIOImage, 
     // ImageIcon doesn't accept that type in its constructor. 

И это:

Image img = ImageIO.read(new File(fileName)); 
ImageIcon imgIcon = new ImageIcon(img); 

JLabel label = new JLabel(imgIcon); 
panel1.add(label); 
panel1.repaint(); 

//Error: Can't read input file!. The panel is still empty 

Опция включена в JMRTD использует два декодеры, и ни один из них не принимает .jp2:

NistDecoder dec=new NistDecoder(); 
WsqDecoder wdec=new WsqDecoder(); 

//using the last one, I tried: bitmp= wdec.decode(myDataInputStream); 
//but with Error, Invalid pointer : 0!. 

Поэтому возникает вопрос: какое правильное использование jj2000 или jai_imageio для чтения изображения jpeg2000 для m файл или DataInputStream, и если это возможно, показать его на простой панели на JFrame?

Благодарим за помощь.

+0

... и что случилось, * точно *, когда вы пытались выше ? – haraldK

+0

Я объяснил в коде, спасибо @haraldK. – TiMr

ответ

1

Предполагая, что код в противном случае считывает изображение, как вы хотите, вы можете легко получить BufferedImage из ImageReader как это:

try (ImageInputStream input = ImageIO.createImageInputStream(new File(fileName))) { 
    j2kImageReader.setInput(input)); 

    // Not sure why/if you want to read only the upper left, but I'll leave it as is 
    ImageReadParam imageReadParam = j2kImageReader.getDefaultReadParam(); 
    imageReadParam.setSourceRegion(new Rectangle(0, 0, 300, 300)); 

    // Use read instead of readAll 
    BufferedImage image = j2kImageReader.read(0, imageReadParam); 

    // You can now create an icon and add to a component 
    Icon icon = new ImageIcon(image); 
    JLabel label = new JLabel(icon); 

    // Etc... 
} 
+0

Спасибо, это сработало – TiMr

Смежные вопросы