JavaFX Canvas 扭曲图像

标签 java image canvas javafx

我在 JavaFX 中向图像添加框架,首先将框架添加到 Canvas ,然后添加图像, 这样它就会重叠并且图像看起来有一个框架。

由于某种原因,我的图像扭曲了,缩放效果很差,使得其中的所有内容看起来都“胖”。 如果我尝试在 ImageView (代码中名为“image”的变量)中显示图像,它看起来很正常, 所以我尝试从正常的 ImageView 中获取值(widthheight),但仍然没有运气:

Image i = new Image(path.toUri().toString());
image.setImage(i);

canvas.setWidth(image.getFitWidth() + 20);
canvas.setHeight(image.getFitHeight() + 20);

GraphicsContext gc1 = canvas.getGraphicsContext2D();
gc1.drawImage(rimage, 0, 0, image.getFitWidth() + 20, image.getFitHeight() + 20);

GraphicsContext gc = canvas.getGraphicsContext2D();
image.preserveRatioProperty();
gc.drawImage(i, 10, 10, image.getFitWidth(), image.getFitHeight());

原始图片:

Original

框架和扭曲(头部看起来更圆):

Framed and distorted

最佳答案

我自己还没有对此进行测试,但我注意到您的代码有一些事情。

首先,线路

image.preserveRatioProperty();

实际上并不改变 ImageView 的任何状态,它所做的只是告诉您 ImageView 是否设置为保留比率。

您可能想要的是:

image.setPreserveRatio(true);

我相信这可能会做你想要的。

如果没有,可能是因为图像已经加载,所以如果这仍然不起作用,请尝试将 image.setPreserveRatio(true); 放在 image 之前。 setImage(i);

关于JavaFX Canvas 扭曲图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24371319/

相关文章:

image - 为全屏宽度、响应式幻灯片推荐的最大照片尺寸

php - 将 base64_encode 图像从数据库恢复到文件系统

canvas - 如何在 Flutter Canvas 中链接贝塞尔曲线?

javascript - 两种Kinetic.Shape的比较

java - onPreviewFrame 不改变数据

java - 测试我的应用程序是否接受远程服务器的 SSL 证书

android - Glide - 加载 GIF 作为占位符

javascript - Web Worker 的无文档 Canvas

java - 亚马逊 aws ubuntu java mysql 网络服务 "Error calling Driver#connect"

java - 如何将 char 数组转换为 int 数组?