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 に答える