ImageIO.createImageInputStream продолжает возвращать ноль - PullRequest
5 голосов
/ 27 февраля 2011

Привет всем, Всякий раз, когда я пытаюсь получить объект ImageInputStream, используя ImageIO.createImageInputStream, он просто возвращает null без исключений, предупреждений или ошибок.Я попытался передать функции различные типы данных, простые File и InputStream, но оба также вернули null.В документации сказано, что если подходящего ImageInputStreamSpi не найдено, то функция вернет null, но файл представляет собой стандартное болтовое изображение JPEG, и, конечно, Java поставляется с поставщиком услуг для такого формата из коробки?Спасибо за ваше время.

/**
 * Reads in an image from a file and returns the image in a
 * {@code BufferedImage} object.
 *
 * @param source the file to create the {@code BufferedImage}
 * from.
 * @return the {@code BufferedImage} object representing the image
 * in {@code source}.
 */
private BufferedImage readImage( File source ) {
    // There is only one image in this file
    final int imageIndex = 0;
    BufferedImage image = null;

    try {
        // Get the ImageReader object for this filetype
        Iterator readers =
            ImageIO.getImageReaders( source );
        ImageReader reader = (ImageReader) readers.next();

        // Create an ImageInputStream object from the source image file
        ImageInputStream iis = ImageIO.createImageInputStream( source );
        // Raises IllegalArgumentException, because iis is null
        reader.setInput( iis, true );

        // Read the image file
        image = reader.read( imageIndex );
    } catch ( Exception exception ) {
        exception.printStackTrace();
        System.exit( -1 );
    }

    return image;
}

1 Ответ

3 голосов
/ 27 февраля 2011

Почему ты все это делаешь ??Вы можете просто сделать это:

image = ImageIO.read(source);

Нет Iterators, ImageInputStreams ... нет ничего!

РЕДАКТИРОВАТЬ : поскольку вы настаиваете, ваш кодне работает, потому что вы отправляете File на ImageIO.getImageReaders() вместо ImageInputStream.ТАК что ваш код должен выглядеть примерно так:

ImageInputStream iis = ImageIO.createImageInputStream(source);
Iterator readers = ImageIO.getImageReaders(iis);
ImageReader reader = (ImageReader) readers.next();

reader.setInput(iis, false);
image = reader.read(imageIndex);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...