Как отобразить изображение jpeg2000 на Jframe?

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

Здесь рекомендована старая версия jai_imageio-1.1.jar и библиотека 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 из файла или DataInputStream и, если это возможно, для его отображения на простой панели в JFrame?

Спасибо за помощь.

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...
}
Другие вопросы по тегам