Я хочу сохранить BufferedImage (с именем «результат»):
boolean bres = ImageIO.write(result, ".png", new File(saveP));
Но bres всегда равен нулю.
Этот
ImageIO.getWriterFormatNames()
Возвращает это:
jpg BMP bmp JPG jpeg wbmp png JPEG PNG WBMP GIF gif
Я смогу сохранить как png.
И тип BufferedImage - "2"
BufferedImage@137695c: type = 2 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=ff000000 IntegerInterleavedRaster: width = 720 height = 576 #Bands = 4 xOff = 0 yOff = 0 dataOffset[0] 0
Тип 2 - «ARGB».
Почему я не могу сохранить BufferedImage?
РЕДАКТИРОВАТЬ: saveP = "ex000567.png"
3 ответа
private static void savePNG( final BufferedImage image, final String path ){
try {
RenderedImage rendImage = image;
ImageIO.write(rendImage, "PNG", new File(path));
} catch ( IOException e) {
e.printStackTrace();
}
}
Протестируйте эту функцию. Этот мне подходит.
Важным изменением является то, что второй параметр ImageIO.write
изменен с ".png"
на "PNG"
(строчные буквы "png"
также будут работать), см. Вывод ImageIO.getWriterFormatNames()
для действительных имен.
FormateName
не должно быть "png"
не ".png"
Для тех, кто испытывает эту проблему с файлами JPEG, убедитесь, что ваше буферизованное изображение не имеет альфа-канала. В противном случае com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi#canEncodeImage
отклонит ваше изображение.
Например, вместо BufferedImage.TYPE_INT_ARGB
используйте BufferedImage.TYPE_INT_RGB
или что-то еще, что не имеет альфа-канала.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.