Heim  >  Artikel  >  Java  >  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
DDDOriginal
2024-11-24 03:25:111000Durchsuche

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();

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);

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!

Stellungnahme:
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