Это, по сути, идентично решению broschb только с использованием правильного синтаксиса и фактическим вызовом соответствующих подпрограмм JAI.
public void saveComponentAsTiff(Component c, String filename, boolean subcomp) throws IOException {
saveComponentTiff(c, "tiff", filename, subcomp);
}
public void saveComponent(Component c, String format, String filename, boolean subcomp) throws IOException {
// Create a renderable image with the same width and height as the component
BufferedImage image = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_ARGB);
if(subcomp) {
// Render the component and all its sub components
c.paintAll(image.getGraphics());
}
else {
// Render the component and ignoring its sub components
c.paint(image.getGraphics());
}
// Save the image out to file
ImageIO.write(image, format, new File(filename));
}
Документацию по различным функциям можно найти здесь:
Если вы хотите сохранить в формате, отличном от tiff, вы можете использовать ImageIO.getWriterFormatNames () , чтобы получить список всех форматов вывода изображения, загруженных в данный момент JRE.
ОБНОВЛЕНИЕ: Если вы не заинтересованы в рисовании подкомпонентов, вы можете заменить вызов Component.paintAll (...) на Component.paint (...). Я изменил пример кода, чтобы отразить это. Если для subcomp установить значение true с отображением подкомпонентов, а для false - игнорировать их.