【问题标题】:JavaFX Canvas distorts imageJavaFX Canvas 扭曲图像
【发布时间】:2014-08-13 19:28:55
【问题描述】:

我通过首先将框架添加到画布然后添加图像来向 JavaFX 中的图像添加框架, 这样它就会重叠并且图像似乎有一个框架。

由于某种原因,我的图像变形了,它的缩放比例很差,并且使其中的所有内容看起来都“胖”。 如果我尝试在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());

原图:

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

【问题讨论】:

  • 你能在这里张贴两张图片的截图吗(如果可以的话,它应该是什么样子,它看起来是什么样子)?另外,您的画布变量是什么类型的对象?
  • @clearlyspam23 我添加了照片,我正在使用:Canvas canvas。

标签: java image canvas javafx


【解决方案1】:

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

首先是行

image.preserveRatioProperty();

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

你可能想要的是:

image.setPreserveRatio(true);

我相信它可能会做你想做的事。

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

【讨论】:

  • 尝试在各个地方添加“image.setPreserveRatio(true)”,但仍然没有成功。把'image.setPreserveRatio(true);'在'image.setImage(i);'之前也没有用。
  • 您是否尝试过进行之前的更改,但也删除了设置画布宽度和高度的线条?或者可能将画布宽度和高度设置为Image 的宽度和高度,而不是ImageView 的高度?
  • 是的,我尝试删除线条,但无法使用图像的大小。图像太大,弄乱了程序的布局。 ImageView 会相应地对其进行缩放,这就是我选择使用该尺寸的原因。有什么简单的方法可以自动缩放图像以适应画布大小?
  • 老实说,我现在不确定还有什么可以尝试的。也许您可以尝试使用不同的 LayoutManager?或者您可以通过resize 手动设置 ImageView 的宽度和高度?
【解决方案2】:

对于您的图像来说,窗口是不是太宽了?尝试使用另一个 drawImage 裁剪图像,您可以在其中定义要使用的图像的哪一部分。或更改窗口大小。或者使用相对于图像中的宽度和高度进行绘制。

【讨论】:

    猜你喜欢
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2017-02-12
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    相关资源
    最近更新 更多