ImageView
支持格式:
BMP GIF JPEG PNG
//加载图片
//如果设置了 requestedXXX 尺寸, ImageView中 设置 FitXXX 尺寸是基于requestedXXX 尺寸缩放
Image image = new Image(
String url,
double requestedWidth,
double requestedHeight,
boolean preserveRatio,
boolean smooth,
boolean backgroundLoading);
Image image = new Image("https://pic.rmb.bdstatic.com/c86255e8028696139d3e3e4bb44c047b.png", 100, 100, true, true, true);
//显示图片
ImageView imageView = new ImageView(image);
保持长宽比
ImageView imageView = new ImageView(image);
imageView.setPreserveRatio(true);
imageView.setFitWidth(200);
imageView.setFitHeight(200);
获取尺寸
Image image = new Image("image/portrait.jpg");
ImageView imageView = new ImageView(image);
imageView.setPreserveRatio(true);
System.out.println(imageView.getFitHeight());//0.0
System.out.println(imageView.getFitWidth());//0.0
//获取没有设置尺寸时的实际尺寸
System.out.println(imageView.prefHeight(-1));//391.0
System.out.println(imageView.prefWidth(-1));//391.0
设置圆角
Image image = new Image("image/portrait.jpg");
ImageView imageView = new ImageView(image);
imageView.setPreserveRatio(true);
imageView.setFitWidth(200);
Rectangle rectangle = new Rectangle(imageView.prefWidth(-1), imageView.prefHeight(-1));
rectangle.setArcWidth(50);
rectangle.setArcHeight(50);
imageView.setClip(rectangle);
Viewport
Image image = new Image("image/portrait.jpg");
ImageView imageView = new ImageView(image);
imageView.setPreserveRatio(true);
imageView.setFitWidth(200);
Rectangle2D rectangle = new Rectangle2D(80, 0, 200, 200);
imageView.setViewport(rectangle);
获取像素 ARGB
PixelReader pixelReader = image.getPixelReader();
int argb = pixelReader.getArgb(66, 66);
int a = (argb >> 24) & 0xff;
int r = (argb >> 16) & 0xff;
int g = (argb >> 8) & 0xff;
int b = argb & 0xff;
PixelReader
Image image = new Image("image/portrait.jpg");
ImageView imageView = new ImageView(image);
imageView.setPreserveRatio(true);
imageView.setFitWidth(200);
PixelReader pixelReader = image.getPixelReader();
//获取某个像素 ARGB
int argb = pixelReader.getArgb(66, 66);
int a = (argb >> 24) & 0xff;
int r = (argb >> 16) & 0xff;
int g = (argb >> 8) & 0xff;
int b = argb & 0xff;
//a = 255, r = 43, g = 43, b = 41
System.out.println("a = " + a + ", r = " + r + ", g = " + g + ", b = " + b);
//获取Color对象
Color color = pixelReader.getColor(100, 120);
//0xe74143ff
System.out.println(color.toString());
Label label = new Label("Label");
label.setTextFill(Paint.valueOf("#" + color.toString().substring(2, 8)));
WritableImage
按像素写入
WritableImage writableImage = new WritableImage(100, 100);
PixelWriter pixelWriter = writableImage.getPixelWriter();
for (int i = 0; i < 100; i++) {
for (int k = 0; k < 100; k++) {
pixelWriter.setColor(i, k, Color.RED);
}
}
ImageView imageView = new ImageView(writableImage);
操作现有图片
![](https://cdn.jsdelivr.net/gh/luoshuaidev/luoshuaidev.github.io@image/20200525213103.png)
Image image = new Image("image/portrait.jpg");
WritableImage writableImage = new WritableImage(image.getPixelReader(), 60, 0, 200, 200);
PixelWriter pixelWriter = writableImage.getPixelWriter();
for (int i = 0; i < 50; i++) {
for (int k = 0; k < 50; k++) {
pixelWriter.setColor(i, k, Color.RED);
}
}
ImageView imageView = new ImageView(writableImage);
一张图片写入另一张图片
方法 1
Image image1 = new Image("image/image1.png");
Image image2 = new Image("image/image2.png");
WritableImage writableImage = new WritableImage(image1.getPixelReader(), 0, 0, 1000, 600);
PixelWriter pixelWriter = writableImage.getPixelWriter();
PixelReader pixelReader = image2.getPixelReader();
for (int i = 0; i < 500; i++) {
for (int j = 0; j < 600; j++) {
Color color = pixelReader.getColor(i, j);
pixelWriter.setColor(i, j, color);
}
}
ImageView imageView = new ImageView(writableImage);
方法 2
Image image1 = new Image("image/image1.png");
Image image2 = new Image("image/image2.png");
WritableImage writableImage = new WritableImage(image1.getPixelReader(), 0, 0, 1000, 600);
PixelWriter pixelWriter = writableImage.getPixelWriter();
PixelReader pixelReader = image2.getPixelReader();
WritablePixelFormat<IntBuffer> pixelFormat = PixelFormat.getIntArgbPreInstance();
int[] buffer = new int[1000 / 2 * 600];
pixelReader.getPixels(0, 0, 1000 / 2, 600, pixelFormat, buffer, 0, 1000 / 2);
pixelWriter.setPixels(0, 0, 1000 / 2, 600, pixelFormat, buffer, 0, 1000 / 2);
ImageView imageView = new ImageView(writableImage);
方法 3
Image image1 = new Image("image/image1.png");
Image image2 = new Image("image/image2.png");
WritableImage writableImage = new WritableImage(image1.getPixelReader(), 0, 0, 1000, 600);
PixelWriter pixelWriter = writableImage.getPixelWriter();
PixelReader pixelReader = image2.getPixelReader();
pixelWriter.setPixels(0, 0, 1000 / 2, 600, pixelReader, 0, 0);
ImageView imageView = new ImageView(writableImage);
图片写入文件
BufferedImage bufferedImage = SwingFXUtils.fromFXImage(writableImage, null);
ImageIO.write(bufferedImage, "png", new File("D:/image.png"));
截图 Node.snapshot()
Image image = new Image("image/portrait.jpg");
ImageView imageView = new ImageView(image);
WritableImage snapshot = imageView.snapshot(null, null);
BufferedImage bufferedImage = SwingFXUtils.fromFXImage(snapshot, null);
ImageIO.write(bufferedImage, "png", new File("D:/image.png"));