Skalieren eines BufferedImage mit flexibler Interpolation
Bei dem Versuch, die Größe eines BufferedImage mithilfe der Java-API zu ändern, hatte eine Implementierung Schwierigkeiten, das gewünschte Ergebnis zu erzielen . Der Code nutzte die Graphics2D-Klasse, um eine Skalierungstransformation auf das Bild anzuwenden, stieß jedoch auf einen Fehler.
Bei der Analyse des Problems stellte sich heraus, dass die bereitgestellte Lösung nicht in der Lage war, den Interpolationstyp anzugeben. AffineTransformOp bietet diese entscheidende Flexibilität und ermöglicht die Auswahl von Resampling-Techniken wie Interpolation.
Beachten Sie den folgenden überarbeiteten Code:
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);
Dieser Codeausschnitt demonstriert die Verwendung von AffineTransformOp zum Resampling des Bildes mit bilineare Interpolation, die ein glatteres und genaueres Ergebnis liefert.
Es ist erwähnenswert dass der bereitgestellte Code das Bild sowohl in horizontaler als auch in vertikaler Richtung gleichmäßig skaliert. Für eine asymmetrische Skalierung müsste für jede Achse innerhalb des AffineTransform-Objekts ein unabhängiger Skalierungsfaktor angegeben werden.
Das obige ist der detaillierte Inhalt vonWie kann ich mit Interpolation in Java eine flexible Bildskalierung erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!