画像をスライスして画面に表示しようとしています。 たとえば、右側の余白を20の右の花の写真の左と下の余白を20に変更すると、次のように動作するはずです。JavaFXでズームエフェクトのないViewPortメソッド
(元の画像は最初の画像が最初に表示されます列) enter image description here
ビューポートの方法は、私は、画像をカットし、空のマージンを残して、欲しいものを正確に行いますが、それはJavaFXのウェブサイトで述べているように、ズーム効果を表示する画像の元のサイズを使用しています。
「長方形のビューポートビューポートは、スケーリングまたは他のトランスの前に、画像の座標で指定されます形成。 ビューポートがnullの場合、画像全体が表示されます。ビューポートがnullでない場合、ビューポート内に収まる画像の部分だけが表示されます。画像が完全にビューポートをカバーしていない場合は、ビューポートの任意の残りの領域は、私はすでにビューポートを設定する前にimageView.resize(screenWidth, screenHeight)
を使用しようとした
「。空になりますが、それは動作しません。
もimageView.setFitWidth(screenWidth), imageView.setFitHeight(screenHeight)
に試してみました?説明するように表示されますので、 またはその他の回避策画像を再スケーリングすることが可能である。ここ
は、左余白のための私のコードでは、例として次のとおりです。?
mediaContent.resize(screenWidth, screen.getHeight()); // mediaContent.setFitWidth(screenWidth); // mediaContent.setFitHeight(screen.getHeight()); mediaContent.setViewport(new Rectangle2D(screenWidth-dXLeft, 0, screenWidth, screen.getHeight()));
更新:試しまし示唆した静止画としてsetFitWidth
とsetFitHeight
を設定することが
`imageView.setFitWidth(space.getX());
imageView.setFitHeight(space.getY());
imageView.setViewport(new Rectangle2D(screen.getWidth()-space.getX(), 0, screen.getWidth(), screen.getHeight()));
imageView.setFitWidth(space.getX());
imageView.setFitHeight(space.getY());
return imageView;`
ズームイン画像を表示する私がいないとき 設定マージンsetViewport
メソッドを使用する場合、これは結果である:それは時にあるべきenter image description here
方法マージンを設定しない:enter image description here
更新2:例(java-buddyから変更)ズーム私はそれが画像をカット、動作するようにする方法のjava-バディから
package javafx_imageview_viewport;
import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.control.Slider;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
* @web http://java-buddy.blogspot.com/
*/
public class JavaFX_ImageView_Viewport extends Application {
@Override
public void start(Stage primaryStage) {
ImageView imageView1 = new ImageView(new Image("https://i.imgur.com/6Zl0eQB.jpg"));
imageView1.setFitWidth(150);
imageView1.setFitHeight(100);
//Example to rotate ImageView
Image image2 = new Image("https://i.imgur.com/6Zl0eQB.jpg");
Rectangle2D viewportRect2 = new Rectangle2D(
image2.getWidth()/4,
image2.getHeight()/4,
image2.getWidth()*3/4,
image2.getHeight()*3/4);
ImageView imageView2 = new ImageView(image2);
imageView2.setFitWidth(150);
imageView2.setFitHeight(100);
imageView2.setViewport(viewportRect2);
Slider sliderRotate = new Slider();
sliderRotate.setMin(0);
sliderRotate.setMax(360);
sliderRotate.setValue(0);
sliderRotate.valueProperty().addListener(
(ObservableValue<? extends Number> observable,
Number oldValue, Number newValue) -> {
imageView2.setRotate((double)newValue);
});
//Example to change ViewPort
Image image3 = new Image("https://i.imgur.com/6Zl0eQB.jpg");
Rectangle2D viewportRect3 = new Rectangle2D(
0,
0,
image3.getWidth(),
image3.getHeight());
ImageView imageView3 = new ImageView(image3);
imageView3.setFitWidth(150);
imageView3.setFitHeight(100);
imageView3.setViewport(viewportRect3);
Slider sliderViewPort = new Slider();
sliderViewPort.setMin(0);
sliderViewPort.setMax(1.0);
sliderViewPort.setValue(1.0);
sliderViewPort.valueProperty().addListener(
(ObservableValue<? extends Number> observable,
Number oldValue, Number newValue) -> {
Rectangle2D newViewportRect3 = new Rectangle2D(
0,
0,
(double)newValue*image3.getWidth(),
(double)newValue*image3.getHeight());
imageView3.setViewport(newViewportRect3);
});
VBox vBox = new VBox();
vBox.getChildren().addAll(imageView1,
imageView2, sliderRotate,
imageView3, sliderViewPort);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 300, 350);
primaryStage.setTitle("java-buddy: ImageVIew ViewPort");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
例2に:
package javafx_imageview_viewport;
import javafx.application.Application;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.control.Slider;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
* @web http://java-buddy.blogspot.com/
*/
public class JavaFX_ImageView_Viewport extends Application {
@Override
public void start(Stage primaryStage) {
ImageView imageView1 = new ImageView(new Image("https://i.imgur.com/294AEFU.png"));
//Example to rotate ImageView
Image image2 = new Image("https://i.imgur.com/294AEFU.png");
Rectangle2D viewportRect2 = new Rectangle2D(
image2.getWidth()/4,
image2.getHeight()/4,
image2.getWidth()*3/4,
image2.getHeight()*3/4);
ImageView imageView2 = new ImageView(image2);
imageView2.setViewport(viewportRect2);
Slider sliderRotate = new Slider();
sliderRotate.setMin(0);
sliderRotate.setMax(360);
sliderRotate.setValue(0);
sliderRotate.valueProperty().addListener(
(ObservableValue<? extends Number> observable,
Number oldValue, Number newValue) -> {
imageView2.setRotate((double)newValue);
});
//Example to change ViewPort
Image image3 = new Image("https://i.imgur.com/294AEFU.png");
Rectangle2D viewportRect3 = new Rectangle2D(
0,
0,
image3.getWidth(),
image3.getHeight());
ImageView imageView3 = new ImageView(image3);
imageView3.setViewport(viewportRect3);
Slider sliderViewPort = new Slider();
sliderViewPort.setMin(0);
sliderViewPort.setMax(1.0);
sliderViewPort.setValue(1.0);
sliderViewPort.valueProperty().addListener(
(ObservableValue<? extends Number> observable,
Number oldValue, Number newValue) -> {
Rectangle2D newViewportRect3 = new Rectangle2D(
0,
0,
(double)newValue*image3.getWidth(),
(double)newValue*image3.getHeight());
imageView3.setViewport(newViewportRect3);
});
VBox vBox = new VBox();
vBox.getChildren().addAll(imageView1,
imageView2, sliderRotate,
imageView3, sliderViewPort);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 300, 350);
primaryStage.setTitle("java-buddy: ImageVIew ViewPort");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
'setFitWidth'と' setFitHeight'は、表示したい画像の部分の大きさで呼び出すべきです(画面の大きさではありません)。 –
'setViewport'メソッドを呼び出す前後に? –
私はそれが重要だとは思わない。 –