Component
имеет метод paint(Graphics)
. Этот метод будет рисовать себя на переданной графике. Это то, что мы будем использовать для создания BufferedImage
, потому что у BufferedImage есть удобный метод getGraphics()
. Это возвращает Graphics
-объект, который вы можете использовать для рисования на BufferedImage
.
ОБНОВЛЕНИЕ: Но мы должны предварительно сконфигурировать графику для метода рисования. Это то, что я нашел о рендеринге компонентов AWT на java.sun.com :
Когда AWT вызывает этот метод,
Параметр графического объекта
предварительно настроенный с соответствующим
состояние для рисования на этом конкретном
компонент:
- Цвет объекта Graphics устанавливается на свойство переднего плана компонента.
- Для шрифта объекта Graphics установлено свойство шрифта компонента.
- Перевод объекта Graphics устанавливается так, что координата (0,0) представляет верхний левый угол компонента.
- Прямоугольник клипа объекта Graphics установлен на область компонента, которая нуждается в перерисовке.
Итак, это наш получившийся метод:
public static BufferedImage componentToImage(Component component, Rectangle region) throws IOException
{
BufferedImage img = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_INT_ARGB_PRE);
Graphics g = img.getGraphics();
g.setColor(component.getForeground());
g.setFont(component.getFont());
component.paintAll(g);
if (region == null)
{
region = new Rectangle(0, 0, img.getWidth(), img.getHeight());
}
return img.getSubimage(region.x, region.y, region.width, region.height);
}