Чтение 16-битного растрового изображения на Java


Мне нужно прочитать 16-битное растровое изображение (R5 G6 B5) с java в eclipse. Я попробовал это с ImageIO.read (), но я получаю ошибку: класса javax.imageio.IIOException: не удается прочитать входной файл! в пакете javax.imageio.ImageIO.читать(ImageIO.java: 1301)

Тот же код работает без проблем с 24-битным растровым изображением.

File file = new File("D:/MainScreen16BitR5G6B5.bmp");
imgBuf = ImageIO.read(file);

Есть ли другой способ, чем ImageIO.read () для этого случая? Или какая-то особая библиотека? Я искал решение, но не нашел его. Только для tiff'S или как конвертировать в 16 Немного.

Все советы приветствуются! Спасибо, что помог мне.

1 2

1 ответ:

Это вряд ли связано с форматом растрового изображения. Ваше сообщение об ошибке содержит две подсказки:

  1. текст исключения: "не могу прочитать входной файл!".
  2. источником исключения является строка 1301 ImageIO.java.

Предполагая, что вы используете Java 7, Если мы взглянем на ImageIO Источник , мы можем видеть, что соответствующий код, соответствующий вашему описанию, в ImageIO.read() является:

public static BufferedImage read(File input) throws IOException {
    ...
    if (!input.canRead()) {
        throw new IIOException("Can't read input file!");   // <- line 1301
    }
    ...
}

Обратите внимание, что input является File, и это означает, что File#canRead() возвращает false для ваше изображение. Глядя на документацию для File#canRead(), мы видим, что это:

Возвращает: true если и только если файл, указанный этим абстрактным именем пути, существует и может быть прочитан приложением; false в противном случае.

TL; DR:

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