捕获不可见GUI的屏幕

时间:2018-06-27 15:22:35

标签: swing kotlin awt screenshot awtrobot

目标:显示光标位置的图像(放大)

要实现我想要的功能,我需要在获取屏幕快照之前删除当前显示的GUI元素。然后重新绘制GUI元素。

当前方法:在鼠标移动/拖动时调用 repaint() 。然后在重新绘制GUI的其余部分之前绘制光标位置图像。

问题:在光标位置图像中,即使在调用createScreenCapture()时仍未重绘,GUI仍显示...试图使面板不可见以解决此问题,但是会出现相同的问题。

override fun paint(g: Graphics?) {
        super.paint(g)
        val g2d = g as Graphics2D

        zoom(g2d)
        when {
            currentX > initX && currentY > initY -> redraw(g2d, initX, initY, currentX-initX, currentY-initY)
            currentX > initX && currentY < initY -> redraw(g2d, initX, currentY, currentX-initX, initY-currentY)
            currentX < initX && currentY < initY -> redraw(g2d, currentX, currentY, initX-currentX, initY-currentY)
            currentX < initX && currentY > initY -> redraw(g2d, currentX, initY, initX-currentX, currentY-initY)
        }
    }

private fun zoom(g2d: Graphics2D) {
        val capture = robot.createScreenCapture(Rectangle(currentX - 50, currentY - 50, 100, 100))
        g2d.drawImage(capture, null, currentX, currentY)
    }

currentX / Y是当前鼠标位置。

enter image description here

0 个答案:

没有答案