Я пытаюсь сохранить BufferedImage в виде файла PNM. Я уже установил JAI (Java Advanced Imaging) и импортировал подключаемый модуль PNMWriter. Однако я не знаю, как добавить его в свой ImageWriter, чтобы он мог писать в формате .pnm. Когда я запускаю ImageIO.getWriterFormatNames() для получения возможных имен форматов, появляются только стандартные (.png, .bmp, .jpg....)... Что делать?
Справка по добавлению плагина в Java ImageWriter
comment
Я только что узнал, что в ImageIO есть класс scanForPlugins(), однако это не имеет никакого значения.
- person Pedro Cimini   schedule 01.07.2011
Ответы (2)
Я реализовал это сам для своего программного обеспечения. Это было всего 30 строк исходного кода, и я не хотел добавлять Java Advanced Imaging для чего-то, что можно решить так просто. Вот мое решение:
public static void write(BufferedImage image, OutputStream stream) throws IOException
{
/*
* Write file header.
*/
int imageWidth = image.getWidth();
int imageHeight = image.getHeight();
stream.write('P');
stream.write('6');
stream.write('\n');
stream.write(Integer.toString(imageWidth).getBytes());
stream.write(' ');
stream.write(Integer.toString(imageHeight).getBytes());
stream.write('\n');
stream.write(Integer.toString(255).getBytes());
stream.write('\n');
/*
* Write each row of pixels.
*/
for (int y = 0; y < imageHeight; y++)
{
for (int x = 0; x < imageWidth; x++)
{
int pixel = image.getRGB(x, y);
int b = (pixel & 0xff);
int g = ((pixel >> 8) & 0xff);
int r = ((pixel >> 16) & 0xff);
stream.write(r);
stream.write(g);
stream.write(b);
}
}
stream.flush();
}
person
Simon C
schedule
31.08.2011
Используйте JAI (класс JAI
), а не ImageIO
(стандарт Java), используйте:
JAI.create("ImageWrite", renderedImage, file, "pnm");
person
David Oliván Ubieto
schedule
10.09.2011