Mise à l'échelle d'une BufferedImage avec une interpolation flexible
Dans une tentative de redimensionner une BufferedImage à l'aide de l'API Java, une implémentation a eu du mal à produire le résultat souhaité . Le code a utilisé la classe Graphics2D pour appliquer une transformation de mise à l'échelle à l'image, mais a rencontré un échec.
Après avoir analysé le problème, il est devenu évident que la solution fournie n'avait pas la capacité de spécifier le type d'interpolation. AffineTransformOp offre cette flexibilité cruciale, permettant la sélection de techniques de rééchantillonnage telles que l'interpolation.
Considérez le code révisé suivant :
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);
Cet extrait de code démontre l'utilisation d'AffineTransformOp pour rééchantillonner l'image à l'aide interpolation bilinéaire, produisant un résultat plus fluide et plus précis.
Il convient de noter que le à condition que le code redimensionne l’image uniformément dans les dimensions horizontales et verticales. Pour une mise à l'échelle asymétrique, un facteur de mise à l'échelle indépendant devra être spécifié pour chaque axe de l'objet AffineTransform.
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!