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
1062 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!

source:php.cn
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