Отображение профиля вещания JPEG2000 в формате Java - PullRequest
0 голосов
/ 03 февраля 2019

Мой сын работает над проектом Java для отображения изображений JPEG2000 из файла.В этом конкретном случае изображения JPEG2000 основаны на профиле широковещания, который используется в стандарте TR-01 Форума видеоуслуг для транспортировки видео JPEG2000.

Он основывает свой код на другом примере, найденном здесь:

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

, но возникают проблемы с отображениемэтот конкретный формат файла.Другие примеры файлов изображений, такие как Профиль 1 или 2, работают, но не Профиль вещания.Формат файла, который он пытается отобразить, прекрасно работает со средством просмотра Kakadu, поэтому кажется, что профиль трансляции не поддерживается.У кого-нибудь есть опыт отображения файлов Broadcast Profile из Java.

Редактировать: С тех пор он нашел другой способ сделать это (вызывая openjpeg "opj_decompress" извне для преобразования из JPEG2000 в bmp), но это в основном кодон пытался.Было бы неплохо, если бы он работал лучше, чем при использовании внешней функции:

package javaapplication1;


import java.awt.GridLayout;
import java.io.File;
import java.io.IOException;
import javax.imageio.*;
import javax.swing.JFrame;
import javax.swing.JLabel;
import jj2000.j2k.*;
import com.sun.media.imageioimpl.plugins.jpeg2000.*;
import java.awt.Image;
import java.awt.image.BufferedImage;
import javax.imageio.spi.ImageReaderSpi;
import javax.imageio.stream.ImageInputStream;
import javax.swing.ImageIcon;

/**
 *
 */
public class JavaApplication1 {
   public static JFrame mainFrame;
   public static JLabel headerLabel;
   public static JLabel statusLabel;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        // TODO code application logic here
        prepareGUI();
        //JLabel hold = new JLabel("hold");

    }
    private static void prepareGUI() throws IOException{
        J2KImageReaderSpi j2kspi = new J2KImageReaderSpi();
        J2KImageReader j2kImageReader = new J2KImageReader(j2kspi);
        mainFrame = new JFrame("Java Swing Examples");
        mainFrame.setSize(1000,1000);
        mainFrame.setLayout(new GridLayout(3, 8));
        headerLabel = new JLabel("", JLabel.CENTER);  


        try (ImageInputStream input = ImageIO.createImageInputStream(new File("file1.j2k"))) 
        {

            j2kImageReader.setInput(input);

            ImageReadParam imageReadParam = j2kImageReader.getDefaultReadParam();

            BufferedImage image = j2kImageReader.read(0, imageReadParam); 
            ImageIcon imgIcon = new ImageIcon(image);

            JLabel label = new JLabel(imgIcon);
            mainFrame.add(label);
            mainFrame.add(headerLabel);

            //mainFrame.add(statusLabel);
            mainFrame.setVisible(true); 
        }
   }
}

Выдаются следующие ошибки:

Exception in thread "main" java.lang.RuntimeException: Codestream capabiities not JPEG 2000 - Part I compliant
    at com.sun.media.imageioimpl.plugins.jpeg2000.J2KReadState.initializeRead(J2KReadState.java:696)
    at com.sun.media.imageioimpl.plugins.jpeg2000.J2KReadState.<init>(J2KReadState.java:189)
    at com.sun.media.imageioimpl.plugins.jpeg2000.J2KImageReader.read(J2KImageReader.java:443)
    at javaapplication1.JavaApplication1.prepareGUI(JavaApplication1.java:60)
    at javaapplication1.JavaApplication1.main(JavaApplication1.java:37)
Caused by: java.lang.Error: Codestream capabiities not JPEG 2000 - Part I compliant
    at jj2000.j2k.codestream.reader.HeaderDecoder.readSIZ(HeaderDecoder.java:527)
    at jj2000.j2k.codestream.reader.HeaderDecoder.readFoundMainMarkSeg(HeaderDecoder.java:2164)
    at jj2000.j2k.codestream.reader.HeaderDecoder.<init>(HeaderDecoder.java:2368)
    at com.sun.media.imageioimpl.plugins.jpeg2000.J2KReadState.initializeRead(J2KReadState.java:423)
    ... 4 more
...