【发布时间】:2010-01-14 18:13:32
【问题描述】:
我需要将 jpanel 的某个区域转换为 bufferedImage,或其他格式以显示在另一个 jpanel 中。
到目前为止,我只看到了将整个 jpanel 转换为 bufferedImage 的代码,但就我而言,我只需要 jpanel 内的一个区域。
谢谢
【问题讨论】:
我需要将 jpanel 的某个区域转换为 bufferedImage,或其他格式以显示在另一个 jpanel 中。
到目前为止,我只看到了将整个 jpanel 转换为 bufferedImage 的代码,但就我而言,我只需要 jpanel 内的一个区域。
谢谢
【问题讨论】:
创建一个具有请求大小的 BufferedImage 以接收图像。
获取一个用于在此图像上绘图的 Graphics2D,并让 JPanel 在其上绘图。
JPanel panel = ...
BufferedImage image = new BufferedImage(200, 200, TYPE_INT_ARGB);
Graphics2D gg = image.createGraphics();
try {
gg.translate(-100, -20); // start point of region negated
panel.paint(gg);
} finally {
gg.dispose();
}
【讨论】:
由于您已经拥有将整个事物转换为 BufferedImage 的代码,因此您可以使用该代码,然后在生成的 BufferedImage 上调用 getSubImage 以获取子区域。
【讨论】:
到目前为止,我只看到了将整个 jpanel 转换为 bufferedImage 的代码,但就我而言,我只需要 jpanel 内的一个区域。
然后拍摄该图像并将所需区域重新绘制为新图像,然后您就完成了。
【讨论】:
最简单的可能是Robot.createScreenCapture()
您需要将面板坐标系转换为屏幕坐标系。请参阅Component.getBounds() 和Component.getLocationOnScreen()。
【讨论】: