Maison > Java > javaDidacticiel > Pourquoi Graphics2D.scale() ne redimensionne-t-il pas une image tamponnée et comment puis-je la mettre à l'échelle efficacement ?

Pourquoi Graphics2D.scale() ne redimensionne-t-il pas une image tamponnée et comment puis-je la mettre à l'échelle efficacement ?

DDD
Libérer: 2024-11-24 03:25:11
original
1105 Les gens l'ont consulté

Why Doesn't Graphics2D.scale() Resize a BufferedImage, and How Can I Effectively Scale It?

Comment mettre à l'échelle efficacement une image tamponnée

Question :

Dans le code suivant, un la tentative de mise à l'échelle d'une BufferedImage à l'aide de Graphics2D.scale() échoue. Quelle pourrait en être la raison ?

BufferedImage image = MatrixToImageWriter.getBufferedImage(encoded);
Graphics2D grph = image.createGraphics();
grph.scale(2.0, 2.0);
grph.dispose();
Copier après la connexion

Réponse :

La méthode Graphics2D.scale() applique simplement une transformation de mise à l'échelle au contexte graphique actuel sans réellement modifier BufferedImage. Pour redimensionner l'image elle-même, une approche différente doit être adoptée.

Solution utilisant AffineTransformOp :

Une façon de mettre à l'échelle efficacement une BufferedImage consiste à utiliser un AffineTransformOp. Cela permet un meilleur contrôle sur le processus de mise à l'échelle, y compris le type d'interpolation. Voici un exemple :

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);
Copier après la connexion

Dans ce code :

  • Une nouvelle BufferedImage (après) est créée avec la même largeur et la même hauteur que l'original.
  • Un AffineTransform est créé pour redimensionner l'image par 2x.
  • Un AffineTransformOp est créé à l'aide de la transformation et d'un spécifique type d'interpolation (TYPE_BILINEAR).
  • La méthode filter() est utilisée pour appliquer l'opération de mise à l'échelle à l'image d'origine, créant ainsi l'image mise à l'échelle après.

Remarque :

  • Cette approche utilise le rééchantillonnage pour redimensionner l'image, plutôt que recadrage.
  • Pour plus d'informations sur la mise à l'échelle et le recadrage des images, reportez-vous aux ressources et exemples associés.

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal