代码之家  ›  专栏  ›  技术社区  ›  Elliott

在Java Applet中锐化图像

  •  1
  • Elliott  · 技术社区  · 16 年前

    我有一个扫描图像,我在Java applet中查看。图像为jpeg格式。当我在Internet Explorer中查看相同的图像时,它看起来更清晰。我想让我的应用程序中的图像质量和我在IE中看到的一样清晰。关于如何在Java中渲染图像的任何想法?

    谢谢,

    埃利奥特

    2 回复  |  直到 16 年前
        1
  •  2
  •   Neil Coffey    16 年前

    我严重怀疑IE会主动地锐化图像,所以可能发生的情况是您在小程序中以降低质量的方式显示图像(可能会缩放图像)。你能贴些密码吗?

        2
  •  0
  •   luke    16 年前

    考虑到这是一个扫描图像,我假设它是一个很可能包含文本的文档。我相信IE使用 bilinear sampling 默认情况下,该算法用于缩放图像,可以为这些类型的图像生成更好的结果。在任何情况下,渲染图像时都需要修改缩放算法,以确保正确的质量。

    下面是一个简单的例子,说明将缩放算法设置为双线性,这可能会给出正确的结果,也可能不会给出正确的结果,我将继续尝试不同的算法,直到得到正确的结果。(见 RenderingHints 并查找以“value_interpolation”开头的设置…)

    私有浮动X比例因子,Y比例因子=…; private bufferedImage originalImage=…;

    public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D)g;
        int newW = (int)(originalImage.getWidth() * xScaleFactor);
        int newH = (int)(originalImage.getHeight() * yScaleFactor);
        g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
                            RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g2.drawImage(originalImage, 0, 0, newW, newH, null);
    }
    

    也可以看看这个 article 为了深入了解各种性能问题,并确保一切正常工作。