Partant d'images 128x128 pour arriver à 1024x1024, j'ai essayé trois moyens. Le premier, renderingHint :
Le deuxième en utilisant un noyau de convolution :Code:
1
2
3 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);
Le dernier avec Image.getScaleInstance() :Code:
1
2
3 Kernel k = new Kernel(5, 5, new float[] { .0036f, .0146f, .0256f, .0146f, .0036f, .0146f, .0586f, .09523f, .0586f, .0146f, .00256f, .09523f, .015f, .09523f, .0256f , .0036f, .0146f, .0256f, .0146f, .0036f, .0146f, .0586f, .09523f, .0586f, .0146f}); ConvolveOp op = new ConvolveOp(k); BufferedImage blurry = op.filter(image, null);
J'ai lu que ce dernier bien que déprécié était meilleur mais aussi plus lent.Code:Image Image_finale = image.getScaledInstance(1024, 1024, Image.SCALE_SMOOTH);
Le résultat est affligeant. Le dernier ne semblant même pas interpolé. Sinon cela donne une bouillie, une sorte de pixellisation lissée, laissant des "îlots". Mauvaise utilisation, trop grand suréchantillonnage, noyau trop petit ?
J'allais oublier de préciser que nous utilisons une lookup table qui accentue le phénomène avec des contrastes importants.