放大某个区域时如何计算方框位置

时间:2016-11-29 08:54:09

标签: java image-processing

我有JPanel,大小为995 x 745像素。面板本身无法调整大小。

面板包含6296 x 7888像素大的图像。我没有创建图像,没有真正的方法可以在没有大量质量损失的情况下缩小图像。

在图片中,我添加了一堆(约230个)不同的" hitboxes",基本上只是您点击某个事件触发位置的坐标。

问题是,当我尝试放大或缩小图片时,这些命中箱不再处于正确的位置。

我试图写出多个不同的数学公式'然而,它只能解决这个问题,它只适用于最靠近左上角的方框。

它越往右,越来越多的盒子向左移动。无论是那个,还是一个缩放刻度都会使框移动400像素。

我现在才开始处理X部分,因为尝试同时解决这两个部分会更复杂。

这是我的代码:

if ((clickX >= getLocationX(l.getClickX()) && clickX <= (getLocationX(l.getClickX()) + getBoxSize()))
        && (clickY >= getLocationY(l.getClickY())
        && clickY <= (getLocationY(l.getClickY()) + getBoxSize()))) {
    System.out.println("Clicked box");
}

方法:

private int getLocationX(int initialX) {
    if (zoomMod < 0) {
        // Zoom out.
        return (int) (((initialX - 85) + currentX) + ((int) (zoomMod * 0.006)));// 0.0004
    } else {
        // Zoom in.
        return (int) (((initialX - 85) + currentX) + ((int) (zoomMod * 0.0004)));// 0.0004
    }
}

private int getLocationY(int initialY) {
    return ((initialY - 85) + currentY);
}

private int getBoxSize() {
    if (zoomMod < 0) {
        return 170 - ((int) Math.abs(zoomMod * 0.0173));
    } else {
        return ((int) (zoomMod * .028)) + 170;
    }
}

这就是没有缩放的情况:

Before

当完全放大时:

After

0 个答案:

没有答案