0

我调整了图像的大小,但它的质量很低。我听说过双三次插值,但我无法获得任何实现代码。这是我的代码:

private static BufferedImage resize(BufferedImage image, int width, int height) 
{ 
    int w = image.getWidth(), h = image.getHeight();
    int type = image.getType() == 0? BufferedImage.TYPE_INT_ARGB : image.getType();
    BufferedImage resizedImage = new BufferedImage(width, height, type);
    Graphics2D g = resizedImage.createGraphics();
    g.setComposite(AlphaComposite.Src);
    g.setRenderingHint(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY);
    g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BICUBIC);

    //g.drawImage(image, 0, 0, width, height, null);
    g.scale((double)width/w,(double)height/h);
    g.drawRenderedImage(image, null);
    g.dispose();
    return resizedImage; 
}   

我想在上采样和下采样后获得最好的质量。

4

1 回答 1

1

只有当您需要通过一些非整数比例因子调整大小时,才需要双三次插值和其他插值方案。您可能缺少的是,您需要在下采样(缩小时)之前过滤图像或在上采样(扩展时)后过滤以避免混叠伪影,这是一个完全不同的问题。这适用于整数和非整数比例因子。

于 2010-10-12T08:26:18.683 回答