java - 如何实现可缩放的绘图区域?
问题描述
情况:我实现了一个 Java Swing 应用程序,它截取现有程序中选定的组件并将其显示在新框架中。显示后,您可以绘制矩形、圆形和生成文本框。
我的程序由一个绘图组件组成,该组件位于通过通过绘制的框架内。paintComponent()
方法。更具体地说,我绘制了两张缓冲图像,一张用于图像本身,另一张用于存储图纸。
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// Scale
int newWidth = (int) (image.getWidth(null) * zoom);
int newHeight = (int) (image.getHeight(null) * zoom);
// Display image and drawing
g.drawImage(image, 0, 0, newWidth, newHeight, null);
g.drawImage(drawImage, 0, 0, newWidth, newHeight, null);
}
形状本身是在上面看到的drawImage上绘制的。要在图像上绘图,我使用抽屉变量:drawer = (Graphics2D) drawImage.getGraphics();
private void drawRectangle(boolean fill, Point scaledNow) {
if (fill) {
drawer.fillRect(
// X-coordinate
(int) (Math.min(scaledNow.getX(), lastClick.getX())),
// Y-coordinate
(int) (Math.min(scaledNow.getY(), lastClick.getY())),
// width
(int) (Math.abs(scaledNow.getX() - lastClick.getX())),
// height
(int) (Math.abs(scaledNow.getY() - lastClick.getY())));
}
else {
drawer.drawRect(
// X-coordinate
(int) Math.min(scaledNow.getX(), lastClick.getX()),
// Y-coordinate
(int) Math.min(scaledNow.getY() , lastClick.getY()),
// width
(int) Math.abs(scaledNow.getX() - lastClick.getX()),
// height
(int) Math.abs(scaledNow.getY() - lastClick.getY()));
}
}
问题:我正在尝试实现一个撤消按钮,该按钮根据此示例删除最新的形状。撤消示例
为了直接在组件上绘图,据我所知,我必须自己进行所有缩放,但是当我保持当前的方法时,撤消示例中提到的方法不起作用。
我应该如何处理自己绘制的图像上的绘图?
解决方案
推荐阅读
- python - 如何在 Python 中更改矩阵的所有列值?
- c# - 为什么我的 ThreadID 对于并行运行的 10 个任务不是唯一的?
- java - 在 Android Studio 中打印信号强度的最佳方法是什么?
- spring - Spring Batch:这是一个小任务还是块?
- coq - 如何连接定义为有限类型函数的向量
- flutter - 如何在 dart 中解析 PDF 文件的内容?
- amazon-web-services - 无法初始化类 com.amazonaws.xray.AWSXRay
- python - 如何使用 Pandas DataFrame 中的行值从列表构建中删除 NaN 值
- python - 如何从索引更改为多索引 - 熊猫
- flutter - ListView Flutter 上的浮动操作按钮