Maison >Java >javaDidacticiel >Pourquoi Graphics2D ne redimensionne-t-il pas efficacement une image tamponnée ?

Pourquoi Graphics2D ne redimensionne-t-il pas efficacement une image tamponnée ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-24 06:55:16712parcourir

Why Doesn't Graphics2D Effectively Rescale a BufferedImage?

Redimensionnement d'une image tamponnée

Question :

Malgré le respect des JavaDocs, les tentatives de mise à l'échelle d'une image tamponnée à l'aide de Graphics2D se sont avérées futile. Le code suivant est utilisé :

BufferedImage image = MatrixToImageWriter.getBufferedImage(encoded);
Graphics2D grph = image.createGraphics();
grph.scale(2.0, 2.0);
grph.dispose();

Réponse :

Le problème peut provenir de l'utilisation de Graphics2D seul, qui met uniquement à l'échelle le rendu à l'écran sans altérer le rendu réel. données d'images. Pour un redimensionnement efficace des images, AffineTransformOp est recommandé, car il offre un contrôle supplémentaire sur le type d'interpolation. Voici comment le code peut être modifié à l'aide d'AffineTransformOp :

BufferedImage before = getBufferedImage(encoded);
int w = before.getWidth();
int h = before.getHeight();
BufferedImage after = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
AffineTransform at = new AffineTransform();
at.scale(2.0, 2.0);
AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
after = scaleOp.filter(before, after);

Cette approche permet une interpolation bilinéaire, qui produit des résultats de redimensionnement fluides et précis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn