当前位置: 首页 > 面试题库 >

在Java中按比例缩小后,为什么此图像看起来如此糟糕?

况浩邈
2023-03-14
问题内容

Here is the original image:
http://rank.my/public/images/uploaded/orig-4193395691714613396.png

And here it is scaled down to 300x225:

http://rank.my/public/images/uploaded/norm-4193395691714613396.png

And here it is scaled down to 150x112:

http://rank.my/public/images/uploaded/small-4193395691714613396.png

As you can see, 300x225 looks pretty bad, and 150x112 looks awful. Here is the
code I’m using to scale down the image:

private static BufferedImage createResizedCopy(final BufferedImage source, final int destWidth,
        final int destHeight) {
    final BufferedImage resized = new BufferedImage(destWidth, destHeight, source.getType());
    final Graphics2D bg = resized.createGraphics();
    bg.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    bg.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    bg.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    final float sx = (float) destWidth / source.getWidth();
    final float sy = (float) destHeight / source.getHeight();
    bg.scale(sx, sy);
    bg.drawImage(source, 0, 0, null);
    bg.dispose();
    return resized;
}

我在这里做错了什么?图像缩放不必特别
快,质量绝对是优先于速度的。我使用了错误的
技术吗?


问题答案:

有三种方法可以解决缩小问题。首先是分
多个步骤进行,每个步骤最多减少75%。第二种是
在调整大小之前模糊图像。缩小程度越多
,模糊程度就越高。第三种方法是使用一种方法,该方法使用
朴素的双线性或双三次插值方法使用的2x2至4x4像素块进行滤波。
随着收缩因子的增大,
滤镜使用的像素块也应增大,否则您将看到混叠伪像,如此处所示。



 类似资料:
  • 在我的GUI应用程序中,我从中的嵌套函数中为赋值。 这当然会返回一个无限的LocalError。 我的问题是,为什么使用declaration关键字来解决这个问题是件坏事? 因为它实现了与相同的最终结果,即的值被更改,而不是创建一个新的局部变量;为什么这是一个坏的,或者不-蟒蛇的方法来解决这个问题?

  • 所以我是新的Java图形,我正在创建一个程序,将显示一个矩形。但当我运行我的程序时,它只显示为一个小盒子,而不是矩形。我真的不知道为什么会这样。 下面是我的代码: 这是我的矩形类: 这是我的形状界面:

  • 这与 R- 查看具有任何 NA 的所有列名称有关 我比较了data.frame和data.table版本,发现data.table慢了10倍。这与大多数使用data.table的代码相反,后者确实比data.frame版本快得多。 预先设置: 可能是什么原因?

  • 我正在将一个rust应用程序打包到docker映像以部署到我的服务器。我发现rust docker的图像大小超过1GB(比使用java和python的任何其他应用程序都大)。为什么rust docker的形象如此巨大?我检查了该层,发现cargo build命令需要400MB以上的内存。 是否可以缩小rust docker的图像?

  • 很长一段时间以来,我一直认为C比JavaScript快。然而,今天我制作了一个基准脚本来比较两种语言的浮点计算速度,结果令人惊叹! JavaScript似乎比C快近4倍! 我让这两种语言在我的i5-430M笔记本电脑上做同样的工作,执行了100000000次。C需要大约410毫秒,而JavaScript只需要大约120毫秒。 我真的不知道为什么JavaScript在这种情况下运行得这么快。有人能解

  • 问题内容: 我正在用Java编写电台代码,并且正在使用一个线程来当然播放流。我在线程的run方法中有一个while循环,该循环检查名为ShouldPlay的变量是否为true,以及是否运行该变量。播放器。然后,我有一个pause()方法,将变量设置为false,并且自然希望它在变量为false时不运行播放器。我创建了一个小示例,说明如何在下面进行设置: 我想发生的事情是,当线程首次运行时,它应该打