ImageView缩放延迟

时间:2014-11-28 19:38:26

标签: java image performance javafx scaling

我有一个名为fillViewer的ImageView,它设置为用图像填充屏幕。如果图像比窗口窄,则缩放以使其与窗口宽度匹配,并且如果它更宽则缩放以匹配高度,使得任何宽高比的图像可以填充任何宽高比的窗口。当我缩放窗口时,我也想要缩放背景图像。但是,偶尔在缩放窗口时,右侧有一个黑色小边缘未被图像填充。从我的测试来看,黑色条越大,窗口缩放越快,因此图像缩放似乎很难“跟上”窗口缩放。知道如何解决这个问题吗?以下是缩放图像的代码:

    mainStage.heightProperty().addListener(new ChangeListener<Number>() {
        @Override public void changed(ObservableValue<? extends Number> observable, Number oldH, Number newH){
            if (!mainStage.isFullScreen()){
                if (proportionalScale){
                    //windowBorders is the outer borders of the window, calculated by Stage size - Scene size
                    mainStage.setWidth(  ( ( newH.doubleValue() - windowBorders.getHeight() )  * windowRatio) + windowBorders.getWidth() );
                }

                //fillRatio is the ratio of the background image, windowRatio is the ratio of the window (Ratio = Width/Height)
                if (fillRatio < windowRatio){
                    fillViewer.setFitWidth(mainScene.getWidth());
                }
                else{
                    fillViewer.setFitHeight(mainScene.getHeight());
                }
            }
        }
    });
对于此查看器,

setPreserveRatio和setSmooth都为true。将setSmooth设置为false不能解决问题。

1 个答案:

答案 0 :(得分:0)

由于没有人回答,我想我会自己回答。当窗口向上或向下拖动太快时,图像没有时间缩放。在用户和程序员方面都有一些解决方法,但最后,我决定使用这个解决方案:

每当触发调整大小侦听器时,我都会将名为needsScaling的布尔值设置为true。然后我听一个事件(目前是鼠标释放,我可能会尝试监听任何鼠标点击或键盘事件)。当我检测到该事件并且needsScaling为true时,我将needsScaling设置为false并触发我的缩放代码。

如果有人有实际的解决方案而不是解决方法,我很高兴听到它。