Ответ 1
Я только что закончил отладку аналогичной проблемы, и я подумал, что буду приводить свои аргументы здесь, хотя Jakob пошел вперед в формате PNG.
Сначала всегда проверяйте возвращаемое значение ImageIO.write(...). Он вернет false, если не будет найден подходящий писатель и что должно было произойти, когда Якоб попытался записать его как растровое изображение. Это происходит, когда фактический формат изображения файла не соответствует тому, что указано в аргументе "имя формата". Никакое исключение не возникает в этом случае. Просмотрите документы в http://docs.oracle.com/javase/7/docs/api/javax/imageio/ImageIO.html#write (java. awt.image.RenderedImage, java.lang.String, java.io.File)
Во-вторых, проверьте тип изображения объекта BufferedImage с помощью метода BufferedImage # getType(). Проверьте возможные возвращаемые значения http://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html#getType(). Например, если вы получаете тип TYPE_INT_ARGB из вашего объекта BufferedImage (который представляет PNG с альфа-компонентом), вы не будете иметь успех с помощью ImageIO.write(bi, "BMP", new File("D:\\test.bmp"))
, и метод вернет false, хотя вы можете увидеть BMP/BMP в списке записей, полученных с помощью ImageIO.getWriterFormatNames()
. Возможно, вам придется работать с кодировкой и преобразовывать изображение в нужный формат.
В-третьих, при столкновении с такими проблемами, которые иногда могут быть больно, всегда помогает использовать редактор изображений, например GIMP, чтобы проверить подробно изложите свои свойства изображения.
@Зеленая стрелка, незначительная заметка... вы можете использовать либо "bmp", либо "BMP" в качестве значения формата изображения. То же самое относится и к другим форматам. Это не имеет значения.