изображение, не прочитанное java

#java #image #swing

#java #изображение #качать

Вопрос:

Мне нужно прочитать следующее без изменений в исходном файле. я пробовал так, но он выдает не ошибку, а изображение не считывается системой

 sun.awt.image.ImageFormatException: Unsupported color conversion request
        at sun.awt.image.JPEGImageDecoder.readImage(Native Method)
        at sun.awt.image.JPEGImageDecoder.produceImage(JPEGImageDecoder.java:136)
        at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:269)
        at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205)
        at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169)
  

Я попробовал следующий код

   /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package imagereader;

/**
 *
 * @author user
 */
//public class Main {
//
//    /**
//     * @param args the command line arguments
//     */
//    public static void main(String[] args) {
//        // TODO code application logic here
//    }
//
//}



    public class ColorApp extends JFrame {
    DisplayPanel displayPanel;

    JButton brightenButton, darkenButton, contrastIncButton, contrastDecButton, reverseButton, resetButton;

    public ColorApp() {
        super();
        Container container = getContentPane();

        displayPanel = new DisplayPanel();
        container.add(displayPanel);

        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(3, 2));
        panel.setBorder(new TitledBorder("Click a Button to Perform the Associated Operation and Reset..."));

        brightenButton = new JButton("Brightness >>");
        brightenButton.addActionListener(new ButtonListener());
        darkenButton = new JButton("Darkness >>");
        darkenButton.addActionListener(new ButtonListener());
        contrastIncButton = new JButton("Contrast >>");
        contrastIncButton.addActionListener(new ButtonListener());
        contrastDecButton = new JButton("Contrast <<");
        contrastDecButton.addActionListener(new ButtonListener());
        reverseButton = new JButton("Negative");
        reverseButton.addActionListener(new ButtonListener());
        resetButton = new JButton("Reset");
        resetButton.addActionListener(new ButtonListener());

        panel.add(brightenButton);
        panel.add(darkenButton);
        panel.add(contrastIncButton);
        panel.add(contrastDecButton);
        panel.add(reverseButton);
        panel.add(resetButton);

        container.add(BorderLayout.SOUTH, panel);

        addWindowListener(new WindowEventHandler());
        setSize(displayPanel.getWidth(), displayPanel.getHeight()   25);
        show();
    }

    class WindowEventHandler extends WindowAdapter {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    }

    public static void main(String arg[]) {
        new ColorApp();
   }

    class ButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            JButton button = (JButton) e.getSource();

            if (button.equals(brightenButton)) {
                displayPanel.brightenLUT();
                displayPanel.applyFilter();
                displayPanel.repaint();
            } else if (button.equals(darkenButton)) {
                displayPanel.darkenLUT();
                displayPanel.applyFilter();
                displayPanel.repaint();
            } else if (button.equals(contrastIncButton)) {
                displayPanel.contrastIncLUT();
                displayPanel.applyFilter();
                displayPanel.repaint();
            } else if (button.equals(contrastDecButton)) {
                displayPanel.contrastDecLUT();
                displayPanel.applyFilter();
                displayPanel.repaint();
            } else if (button.equals(reverseButton)) {
                displayPanel.reverseLUT();
                displayPanel.applyFilter();
                displayPanel.repaint();
            } else if (button.equals(resetButton)) {
                displayPanel.reset();
                displayPanel.repaint();
            }
        }
    }
}

    class DisplayPanel extends JPanel {
    Image displayImage;

    BufferedImage bi;

    Graphics2D big;

    LookupTable lookupTable;

    DisplayPanel() {
        setBackground(Color.black); // panel background color
        loadImage();
        setSize(displayImage.getWidth(this), displayImage.getWidth(this)); // panel
        createBufferedImage();
    }

    public void loadImage() {
        displayImage = Toolkit.getDefaultToolkit().getImage("C:/Documents and Settings/admin/My Documents/NetBeansProjects/Imagereader/src/imagereader/ne-1.jpg");
        MediaTracker mt = new MediaTracker(this);
        mt.addImage(displayImage, 1);
        try {
            mt.waitForAll();
        } catch (Exception e) {
            System.out.println("Exception while loading.");
        }

        if (displayImage.getWidth(this) == -1) {
            System.out.println("No jpg file");
            System.exit(0);
        }
    }

    public void createBufferedImage() {
        bi = new BufferedImage(displayImage.getWidth(this), displayImage.getHeight(this), BufferedImage.TYPE_INT_ARGB);

        big = bi.createGraphics();
        big.drawImage(displayImage, 0, 0, this);
    }

    public void brightenLUT() {
        short brighten[] = new short[256];
        for (int i = 0; i < 256; i  ) {
            short pixelValue = (short) (i   10);
            if (pixelValue > 255)
                pixelValue = 255;
            else if (pixelValue < 0)
                pixelValue = 0;
            brighten[i] = pixelValue;
        }
        lookupTable = new ShortLookupTable(0, brighten);
    }

    public void darkenLUT() {
        short brighten[] = new short[256];
        for (int i = 0; i < 256; i  ) {
            short pixelValue = (short) (i - 10);
            if (pixelValue > 255)
                pixelValue = 255;
            else if (pixelValue < 0)
                pixelValue = 0;
            brighten[i] = pixelValue;
        }
        lookupTable = new ShortLookupTable(0, brighten);
    }

    public void contrastIncLUT() {
        short brighten[] = new short[256];
        for (int i = 0; i < 256; i  ) {
            short pixelValue = (short) (i * 1.2);
            if (pixelValue > 255)
                pixelValue = 255;
            else if (pixelValue < 0)
                pixelValue = 0;
            brighten[i] = pixelValue;
        }
        lookupTable = new ShortLookupTable(0, brighten);
    }

    public void contrastDecLUT() {
        short brighten[] = new short[256];
        for (int i = 0; i < 256; i  ) {
            short pixelValue = (short) (i / 1.2);
            if (pixelValue > 255)
                pixelValue = 255;
            else if (pixelValue < 0)
                pixelValue = 0;
            brighten[i] = pixelValue;
        }
        lookupTable = new ShortLookupTable(0, brighten);
    }

    public void reverseLUT() {
        byte reverse[] = new byte[256];
        for (int i = 0; i < 256; i  ) {
            reverse[i] = (byte) (255 - i);
        }
        lookupTable = new ByteLookupTable(0, reverse);
    }

    public void reset() {
        big.setColor(Color.black);
        big.clearRect(0, 0, bi.getWidth(this), bi.getHeight(this));
        big.drawImage(displayImage, 0, 0, this);
    }

    public void applyFilter() {
        LookupOp lop = new LookupOp(lookupTable, null);
        lop.filter(bi, bi);
    }

    public void update(Graphics g) {
        g.clearRect(0, 0, getWidth(), getHeight());
        paintComponent(g);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2D = (Graphics2D) g;
        g2D.drawImage(bi, 0, 0, this);
    }
   }
  

Комментарии:

1. Насколько велик этот JPEG (в байтах).

2. @AndrewThompson Разве ты (он) не можешь просто прочитать изображение по BufferedImage классу или ImageIO ?

3. @Yoda, если вы имеете в виду «.. с помощью BufferedImage класса ImageIO тогда .. возможно. Множество изображений, которые не могут быть прочитаны одним способом, не могут быть прочитаны другим.

4. Происходит ли это со всеми файлами JPEG или только с одним (или несколькими) в частности? Если это так, прикрепите или свяжите такой JPEG. Переключение на ImageIO звучит как хорошая идея, поскольку оно дает больше гибкости (на основе плагинов) и более предсказуемо, когда что-то идет не так… Если это не поможет, вы можете попробовать использовать мой JPEGImageReader плагин для ImageIO , он будет читать большинство файлов JPEG, которые встроенный считыватель не будет читать.

Ответ №1:

Я думаю, что ваши изображения находятся в Adobe cmyk или cmyk, поэтому только система не может читать изображения. Вы можете попробовать использовать инструмент image magick для преобразования cmyk в rgb. Этот инструмент может запускать команду из режима терминала. Поэтому, пожалуйста, используйте это, это решит вашу проблему

Команда терминала:

Для одного изображения используйте это: конвертировать original.png -colorspace RGB ouput.jpg

Для пакета изображений используйте это: путь к папке> mogrify -colorspace RGB * .jpg

Комментарии:

1. Добавьте -synchronize flag в imagemagick команды, чтобы всегда выполнять сброс к файлу.