Ответ 1
Самый простой способ чтения в TIFF и вывода BMP - использовать класс ImageIO:
BufferedImage image = ImageIO.read(inputFile);
ImageIO.write(image, "bmp", new File(outputFile));
Единственное, что вам нужно сделать, чтобы заставить это работать, - убедиться, что вы добавили JAI ImageIO JAR в свой путь к классам, поскольку BMP и TIFF не обрабатываются JRE без плагинов из этой библиотеки.
Если вы не можете использовать JAI ImageIO по какой-то причине, вы можете заставить его работать с вашим существующим кодом, но вам нужно будет сделать дополнительную работу. Модель цвета, создаваемая для TIFF, которую вы загружаете, вероятно, является индексированной цветовой моделью, которая не поддерживается BMP. Вы можете заменить его на операцию JAI.create( "format",...), предоставив подсказку рендеринга с ключом JAI.KEY_REPLACE_INDEX_COLOR_MODEL.
Возможно, вам повезло записать изображение, прочитанное из файла, во временное изображение, а затем записать временное изображение:
BufferedImage image = ImageIO.read(inputFile);
BufferedImage convertedImage = new BufferedImage(image.getWidth(),
image.getHeight(), BufferedImage.TYPE_INT_RGB);
convertedImage.createGraphics().drawRenderedImage(image, null);
ImageIO.write(convertedImage, "bmp", new File(outputFile));
Мне интересно, если вы используете ту же проблему с цветовой моделью индекса, что и с обычным JAI. В идеале вы должны использовать класс ImageIO для получения экземпляров ImageReader и ImageWriter для всех, кроме самых простых случаев, чтобы вы могли настроить параметры чтения и записи соответственно, но ImageIO.read() и .write() могут быть утончены, чтобы дать вам что вы хотите.