如何克隆javafx.scene.image.image?
是否可以克隆如何克隆javafx.scene.image.image?,javafx,Javafx,是否可以克隆javafx.scene.image.image,而不使用逐像素复制? 还是唯一的办法?这是解决方案: writableImage = SwingFXUtils.toFXImage(SwingFXUtils.fromFXImage(sourceImage, null), null) 完整代码: public class JavaFXApplication extends Application { @Override public void start(Stage primary
javafx.scene.image.image
,而不使用逐像素复制?
还是唯一的办法?这是解决方案:
writableImage = SwingFXUtils.toFXImage(SwingFXUtils.fromFXImage(sourceImage, null), null)
完整代码:
public class JavaFXApplication extends Application {
@Override
public void start(Stage primaryStage) {
Image sourceImage = new Image("http://goo.gl/kYEQl");
ImageView imageView = new ImageView();
imageView.setImage(sourceImage);
ImageView destImageView = new ImageView();
//copying sourceImage
destImageView.setImage(SwingFXUtils.toFXImage(SwingFXUtils.fromFXImage(sourceImage, null), null));
VBox vBox = new VBox();
vBox.getChildren().addAll(imageView, destImageView);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 300, 300);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}这就是解决方案:
writableImage = SwingFXUtils.toFXImage(SwingFXUtils.fromFXImage(sourceImage, null), null)
完整代码:
public class JavaFXApplication extends Application {
@Override
public void start(Stage primaryStage) {
Image sourceImage = new Image("http://goo.gl/kYEQl");
ImageView imageView = new ImageView();
imageView.setImage(sourceImage);
ImageView destImageView = new ImageView();
//copying sourceImage
destImageView.setImage(SwingFXUtils.toFXImage(SwingFXUtils.fromFXImage(sourceImage, null), null));
VBox vBox = new VBox();
vBox.getChildren().addAll(imageView, destImageView);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 300, 300);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}迟交的答案,你可能到目前为止都答对了 我对这个问题的解决办法是这样的
// First create a cache image
planTiles[1][1] = new PlanTile(1, 1, "");
ImageView cache = planTiles[1][1].renderImage(); // timeconsuming operation
// In loop, use cache:
planTiles[iX][iY] = new PlanTile(iX, iY, "");
planTiles[iX][iY].setImage(cache.getImage());
迟来的回答,你可能已经做到了 我对这个问题的解决办法是这样的
// First create a cache image
planTiles[1][1] = new PlanTile(1, 1, "");
ImageView cache = planTiles[1][1].renderImage(); // timeconsuming operation
// In loop, use cache:
planTiles[iX][iY] = new PlanTile(iX, iY, "");
planTiles[iX][iY].setImage(cache.getImage());
下面的代码从您的链接复制并放入一个单独的函数中,这肯定不是问题的“唯一”解决方案。这绝对是我个人所知道的最好的工作。下面是剪切和粘贴的代码: copyImage
/**
* copy the given image to a writeable image
* @param image
* @return a writeable image
*/
public static WritableImage copyImage(Image image) {
int height=(int)image.getHeight();
int width=(int)image.getWidth();
PixelReader pixelReader=image.getPixelReader();
WritableImage writableImage = new WritableImage(width,height);
PixelWriter pixelWriter = writableImage.getPixelWriter();
for (int y = 0; y < height; y++){
for (int x = 0; x < width; x++){
Color color = pixelReader.getColor(x, y);
pixelWriter.setColor(x, y, color);
}
}
return writableImage;
}
下面的代码从您的链接复制并放入一个单独的函数中,这肯定不是问题的“唯一”解决方案。这绝对是我个人所知道的最好的工作。下面是剪切和粘贴的代码: copyImage
/**
* copy the given image to a writeable image
* @param image
* @return a writeable image
*/
public static WritableImage copyImage(Image image) {
int height=(int)image.getHeight();
int width=(int)image.getWidth();
PixelReader pixelReader=image.getPixelReader();
WritableImage writableImage = new WritableImage(width,height);
PixelWriter pixelWriter = writableImage.getPixelWriter();
for (int y = 0; y < height; y++){
for (int x = 0; x < width; x++){
Color color = pixelReader.getColor(x, y);
pixelWriter.setColor(x, y, color);
}
}
return writableImage;
}
你想做什么?是否真的要克隆图像或在场景中多次使用同一图像?因为在这种情况下,只需将图像添加到您创建的ImageView中。我需要精确克隆图像。您想做什么?是否真的要克隆图像或在场景中多次使用同一图像?因为在这种情况下,只需将图像添加到您创建的ImageView中。我需要准确地克隆图像。这些只是帮助器方法。您还可以从提供的链接中的代码创建一个helper方法。此外,SwingFXUtils使用awt,因此如果您喜欢使用纯JavaFX,这实际上不是一个好的解决方案。为什么您不能使用
destImageView.setImage(sourceImage)
?因为我需要另一个对象,先生。我承认,SwingFXUtils并不是一个好的解决方案,但是Oracle并没有提供任何合适的方法来克隆至少JavaFx图像。如果我想写短代码,我必须使用一种丑陋的方式使用SwingFXUtils,否则我将被迫自己实现不存在的javafx.superCloneUtil.cloneImage(图像图像)方法,这肯定是存在的。然后从图像扩展,实现可克隆接口,并从您提供的链接添加9行代码。或者使用公共静态映像克隆(Image sourceImage){…9行代码…}方法创建ImageUtils类。如果您克隆了它们,并且不能重复使用这些图像,那么您肯定有更多的图像处理代码需要实现。这些只是辅助方法。您还可以从提供的链接中的代码创建一个helper方法。此外,SwingFXUtils使用awt,因此如果您喜欢使用纯JavaFX,这实际上不是一个好的解决方案。为什么您不能使用destImageView.setImage(sourceImage)
?因为我需要另一个对象,先生。我承认,SwingFXUtils并不是一个好的解决方案,但是Oracle并没有提供任何合适的方法来克隆至少JavaFx图像。如果我想写短代码,我必须使用一种丑陋的方式使用SwingFXUtils,否则我将被迫自己实现不存在的javafx.superCloneUtil.cloneImage(图像图像)方法,这肯定是存在的。然后从图像扩展,实现可克隆接口,并从您提供的链接添加9行代码。或者使用公共静态映像克隆(Image sourceImage){…9行代码…}方法创建ImageUtils类。如果您克隆了它们并且不能重复使用这些图像,那么无论如何您肯定要实现更多的图像处理代码。