Mise à l'échelle d'une image tamponnée : un guide complet
Énoncé du problème
Dans une tentative de mise à l'échelle une BufferedImage utilisant l'API Java, un développeur a rencontré un résultat infructueux avec le code suivant :
BufferedImage image = MatrixToImageWriter.getBufferedImage(encoded); Graphics2D grph = image.createGraphics(); grph.scale(2.0, 2.0); grph.dispose();
Solution
Alors que le concept de mise à l'échelle d'une BufferedImage à l'aide de Graphics2D. scale() peut paraître simple, il est essentiel de noter que cette opération n'affecte pas réellement les données d'image sous-jacentes. Pour obtenir une véritable mise à l'échelle, il est nécessaire d'utiliser la classe AffineTransformOp, qui offre une flexibilité et des options d'interpolation améliorées.
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);
Considérations supplémentaires
L'extrait de code présenté illustre le rééchantillonnage, une technique qui crée une nouvelle image avec la taille souhaitée tout en conservant le rapport hauteur/largeur d'origine de l'image d'origine. En revanche, le recadrage, qui modifie à la fois la taille et le rapport hauteur/largeur, est abordé dans un fil de discussion séparé. De plus, divers exemples de concepts connexes sont disponibles pour une exploration plus approfondie.
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!