Чтение 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 ответ:
Это вряд ли связано с форматом растрового изображения. Ваше сообщение об ошибке содержит две подсказки:
- текст исключения: "не могу прочитать входной файл!".
- источником исключения является строка 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:
Таким образом, мы можем заключить, что реальная проблема заключается либо в том, что файл не существует, либо у вас нет разрешения на его чтение , а не в проблеме с файлом формат. Поэтому убедитесь, что ваши имена путей верны, что файл действительно существует и что ваше приложение имеет разрешение на его чтение. Это всегда должно быть первым, что вы проверяете, когда сталкиваетесь с такими ошибками.