如何实现可缩放的绘图区域?

时间:2020-07-29 06:44:43

标签: java swing

情况:我已经实现了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()));
        }
    }

问题::我正在尝试实现一个撤消按钮,该按钮会根据此示例删除最新的形状。 Undo example

要直接绘制组件,我必须尽我所能进行所有缩放,但是当我保持当前方法时,“撤消”示例中提到的方法将不起作用。

我应该如何处理本身绘制的图像上的绘制?

0 个答案:

没有答案