Heim > Java > javaLernprogramm > Warum ändert Graphics2D.scale() die Größe eines gepufferten Bildes nicht und wie kann ich es effektiv skalieren?

Warum ändert Graphics2D.scale() die Größe eines gepufferten Bildes nicht und wie kann ich es effektiv skalieren?

DDD
Freigeben: 2024-11-24 03:25:11
Original
1084 Leute haben es durchsucht

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

So skalieren Sie ein gepuffertes Bild effektiv

Frage:

Im folgenden Code wird ein Der Versuch, ein BufferedImage mit Graphics2D.scale() zu skalieren, ist nicht erfolgreich. Was könnte der Grund dafür sein?

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

Antwort:

Die Graphics2D.scale()-Methode wendet einfach eine Skalierungstransformation auf den aktuellen Grafikkontext an, ohne tatsächlich Ändern des BufferedImage. Um die Größe des Bildes selbst zu ändern, sollte ein anderer Ansatz gewählt werden.

Lösung mit AffineTransformOp:

Eine Möglichkeit, ein BufferedImage effektiv zu skalieren, ist die Verwendung einer AffineTransformOp. Dies ermöglicht eine bessere Kontrolle über den Skalierungsprozess, einschließlich des Interpolationstyps. Hier ist ein Beispiel:

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);
Nach dem Login kopieren

In diesem Code:

  • Ein neues BufferedImage (danach) wird mit der gleichen Breite und Höhe wie das Original erstellt.
  • Eine AffineTransform wird erstellt, um das Bild um das Zweifache zu skalieren.
  • Eine AffineTransformOp wird unter Verwendung der Transformation und einer bestimmten erstellt Interpolationstyp (TYPE_BILINEAR).
  • Die Methode filter() wird verwendet, um den Skalierungsvorgang auf das Originalbild anzuwenden und so das skalierte Nachbild zu erstellen.

Hinweis:

  • Dieser Ansatz verwendet Resampling, um das Bild zu skalieren, anstatt Zuschneiden.
  • Weitere Informationen zum Skalieren und Zuschneiden von Bildern finden Sie in den entsprechenden Ressourcen und Beispielen.

Das obige ist der detaillierte Inhalt vonWarum ändert Graphics2D.scale() die Größe eines gepufferten Bildes nicht und wie kann ich es effektiv skalieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage