元の画像は次のとおりです: http://rank.my/public/images/uploaded/orig-4193395691714613396.png
そして、ここでは 300x225 に縮小されています。
http://rank.my/public/images/uploaded/norm-4193395691714613396.png
そして、ここでは 150x112 に縮小されています。
http://rank.my/public/images/uploaded/small-4193395691714613396.png
ご覧のとおり、300x225 は見た目が悪く、150x112 はひどく見えます。画像を縮小するために使用しているコードは次のとおりです。
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;
}
ここで何が間違っていますか?画像のスケーリングは特に高速である必要はありません。速度よりも品質が優先されます。間違ったテクニックを使用していますか?