BufferedImage resize

DirtyData

Mitglied
Hallo ich versuche gerade ein bild zu skalieren dafür muss ich die AffineTransformOp benutzen allerdings spuckt mein Code bei mir eine exeption aus

Hier ist mal meine Methode um bilder zu skalieren:
Java:
    private BufferedImage resizeImage(final BufferedImage originalImage, final int width, final int height) {
        final AffineTransform af = new AffineTransform();
        af.scale(width / originalImage.getWidth(), height / originalImage.getHeight());
        final AffineTransformOp operation = new AffineTransformOp(af, AffineTransformOp.TYPE_BILINEAR);
      
        BufferedImage rescaledImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        rescaledImage = operation.filter(originalImage, rescaledImage);

        return rescaledImage;
    }

Getestet habe ich das ganze mit dem bild: "https://pbs.twimg.com/profile_images/875633505861984257/YgXXj6oF.jpg"

dabei bekomme ich aber den fehler:
Code:
java.awt.image.ImagingOpException: Unable to invert transform AffineTransform[[0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]
    at java.awt.image.AffineTransformOp.validateTransform(Unknown Source)
    at java.awt.image.AffineTransformOp.<init>(Unknown Source)

weiß vielleicht jemand warum ich den Fehler überhaupt bekomme?
 
Zuletzt bearbeitet von einem Moderator:

DirtyData

Mitglied
VfL_Freak
width und originalImage.getWidth() liefern dir beide int Versuchs mal so:
af.scale((double)width / originalImage.getWidth(), (double)height / originalImage.getHeight());
ok ich habe es getestet aber nun bekomme ich einen anderen fehler:
Java:
java.lang.NegativeArraySizeException
    at java.awt.image.DataBufferInt.<init>(Unknown Source)
    at java.awt.image.Raster.createPackedRaster(Unknown Source)
    at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
    at java.awt.image.BufferedImage.<init>(Unknown Source)
    at de.dirty.util.ImageStand.resizeImage(ImageStand.java:79)
ich habe versuch hier:
Java:
 BufferedImage rescaledImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
width & height auch zu einen double zu casten das geht aber nicht.
 

VfL_Freak

Top Contributor
Moin,
hier tritt der Fehler auf (DIESE Exception habe ich übrigens noch nie gehabt!):
at de.dirty.util.ImageStand.resizeImage(ImageStand.java:79)

Ist das denn die von dir gepostete Zeile??

width & height auch zu einen double zu casten das geht aber nicht
Natürlich nicht!!
Dein BufferedImage will int haben:
https://docs.oracle.com/javase/8/docs/api/index.html?java/awt/image/class-use/BufferedImage.html

VG Klaus
 

VfL_Freak

Top Contributor
ja, schön ... und was soll einem das sagen ??? :rolleyes:
Wie sehen die Inhalte von width und height aus, wenn der Fehler kommt ???
Sollen wir das raten??

Auf jeden versuchst Du da ein Array mit negativer Größe zu erzeugen, was natürlich nicht gehen kann !!!
 

DirtyData

Mitglied
ok hier der ganze code:
Java:
BufferedImage image = ImageIO.read(new URL(https://pbs.twimg.com/profile_images/875633505861984257/YgXXj6oF.jpg"));
final double ratio = image.getHeight() / image.getWidth();

final BufferedImage resized = this.resizeImage(image, (int)(height / ratio), height);


    private BufferedImage resizeImage(final BufferedImage originalImage, final int width, final int height) {
        final AffineTransform af = new AffineTransform();
        af.scale((double)width / originalImage.getWidth(), (double)height / originalImage.getHeight());
        final AffineTransformOp operation = new AffineTransformOp(af, AffineTransformOp.TYPE_BILINEAR);
      
        double w = (double)width;
        double h = (double)height;
      
        BufferedImage rescaledImage = new BufferedImage((int)w, (int)h, BufferedImage.TYPE_INT_ARGB);
        rescaledImage = operation.filter(originalImage, rescaledImage);

        return rescaledImage;
    }
 
Zuletzt bearbeitet von einem Moderator:

mihe7

Top Contributor
LOL - ich wünsche @VfL_Freak weiterhin viel Spaß beim Raten, was denn nun width und height ist...

@DirtyData das Casten von int zu double und anschließend wieder zurück zu int deutet aber schon auf pure Verzweiflung hin, oder? :)

Wenn Du keinen Debugger verwenden willst, dann bau ganz oben in resizeImage wenigstens mal ein System.err.println(width + " " + height); ein und schau mal nach, was die Konsole sagt.
 

VfL_Freak

Top Contributor
LOL - ich wünsche @VfL_Freak weiterhin viel Spaß beim Raten, was denn nun width und height ist...
Danke danke :D
Meine Frage war auch nicht, "... was denn nun width und height ist ..:", sondern welche konkreten Werte sie haben, wenn der Fehler auftritt.
Wenn dort double drinsteht, ist doch klar, das der Konstruktor meckert ;)

Aber wie Du schon richtig sagst:
das Casten von int zu double und anschließend wieder zurück zu int deutet aber schon auf pure Verzweiflung hin, oder?

An die Methode werden doch Integer übergeben ... warum nutzt Du sie dann nicht, sondern castest wie wild in der Weltgeschichte herum ???

VG Klaus
 

mihe7

Top Contributor
Meine Frage war auch nicht, "... was denn nun width und height ist ..:", sondern welche konkreten Werte sie haben, wenn der Fehler auftritt.
Ja, auf diese Frage war das auch bezogen. Manche Threads sind echt lustig:

F: Wie sehen die Werte von width und height im Fehlerfall aus?
A: alles mögliche an Code, der dann auch height enthält. Nicht erkennbar: Deklaration von height, Initialisierung von height. Und konkrete Werte gibt's sowieso nicht.
 

mihe7

Top Contributor
Mit dem Bild aus der URL und 100x100 läuft Dein Code einwandfrei durch.

Hier zum Testen:

Java:
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.geom.AffineTransform;
import java.io.File;
import java.net.URL;
import javax.imageio.ImageIO;

public class Test {

    private final static String location =
            "https://pbs.twimg.com/profile_images/" +
            "875633505861984257/YgXXj6oF.jpg";

    public static void main(String[] args) throws Exception {
        int height = 100;

        BufferedImage image = ImageIO.read(new URL(location));
        final double ratio = image.getHeight() / image.getWidth();
        final BufferedImage resized = resizeImage(image,
                (int)(height / ratio), height);
        ImageIO.write(image, "JPG", new File("original.jpg"));
        ImageIO.write(resized, "JPG", new File("resized.jpg"));
    }

    private static BufferedImage resizeImage(
            final BufferedImage originalImage,
            final int width,
            final int height) {
        final AffineTransform af = new AffineTransform();
        af.scale((double)width / originalImage.getWidth(),
                 (double)height / originalImage.getHeight());
        final AffineTransformOp operation = new AffineTransformOp(
                af, AffineTransformOp.TYPE_BILINEAR);

        BufferedImage rescaledImage = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_ARGB);
        rescaledImage = operation.filter(originalImage, rescaledImage);

        return rescaledImage;
    }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
RalleYTN JOGL Texture in BufferedImage konvertieren Allgemeine Java-Themen 1
M Input/Output BufferedImage vertauscht width und height Allgemeine Java-Themen 6
G BufferedImage und ByteArray Allgemeine Java-Themen 2
P Threads BufferedImage, Thread Concurrency Allgemeine Java-Themen 1
M Problem mit BufferedImage und PrinterJob im Querformat Allgemeine Java-Themen 1
T BufferedImage verändert sich beim Einlsesen Allgemeine Java-Themen 1
M BufferedImage toString() überschreiben Allgemeine Java-Themen 5
Thallius PDF von einem BufferedImage erstellen Allgemeine Java-Themen 1
S BufferedImage vergleich mit Subimage Allgemeine Java-Themen 1
reibi OutOfMemoryError bei Behandlung von BufferedImage's Allgemeine Java-Themen 6
TheSorm BufferedImage spiegeln Allgemeine Java-Themen 3
A BufferedImage einzelne Pixel transparent machen V2.0 Allgemeine Java-Themen 2
S Undoable BufferedImage? Allgemeine Java-Themen 2
lumo 2D-Grafik BufferedImage und operationen darauf Allgemeine Java-Themen 2
K Image zu BufferedImage konvertieren Allgemeine Java-Themen 9
H BufferedImage Invertieren Allgemeine Java-Themen 13
D md5 berechnen für BufferedImage Allgemeine Java-Themen 5
D BufferedImage rotieren Allgemeine Java-Themen 8
TiME-SPLiNTER Binary BufferedImage automatisch croppen Allgemeine Java-Themen 4
F byte[] aus einem BufferedImage Allgemeine Java-Themen 3
0 BufferedImage - Farbton verändern Allgemeine Java-Themen 5
J BufferedImage aus PNG Files haben keinen Type Allgemeine Java-Themen 4
T umwandeln BufferedImage to File Allgemeine Java-Themen 7
reibi BufferedImage nach InputStream Allgemeine Java-Themen 10
Q BufferedImage enzelne Pixel tranzparent machen Allgemeine Java-Themen 2
S BufferedImage mit Transparenten Hintergrund Allgemeine Java-Themen 4
Z Farbe des Pixels rechts unten in einem BufferedImage? Allgemeine Java-Themen 4
R problem! bufferedimage speichern. Allgemeine Java-Themen 7
S BufferedImage als *.tga speichern Allgemeine Java-Themen 3
H Pixel im BufferedImage Manipulieren ? Allgemeine Java-Themen 17
Steev BufferedImage und setRGB() Allgemeine Java-Themen 10
P miese performance bei nem BufferedImage + repaint :( Allgemeine Java-Themen 6
M Drucken mit BufferedImage Allgemeine Java-Themen 9
M Problem mit Durchsuchen von BufferedImage Allgemeine Java-Themen 10
I BufferedImage etc Allgemeine Java-Themen 6
F BufferedImage -> Image Allgemeine Java-Themen 4
G BufferedImage benutzen Allgemeine Java-Themen 6
U BufferedImage.getSubimage ? paintComponent ? Allgemeine Java-Themen 4
T Bilder schnell in BufferedImage laden Allgemeine Java-Themen 4
G BufferedImage zeichnen Allgemeine Java-Themen 4
T BufferedImage aus einem byte-Array? Allgemeine Java-Themen 2
T BufferedImage problem Allgemeine Java-Themen 6
K 32-Bit grayscale BufferedImage Allgemeine Java-Themen 2
T Geschwindigkeit bei Polygonen und BufferedImage Allgemeine Java-Themen 9
T Resize JTextArea Allgemeine Java-Themen 3
M Heap Speicher voll bei spezieller Resize Methode Allgemeine Java-Themen 5
T update() wird bei Programmstart und resize nicht gemacht Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben