linken Bildausschnitt eines BufferedImage abschneiden

johanMicoud

Mitglied
Hallo Jave-Kenner,

ich würde gern den linken Bereich meines BufferedImage einkürzen. Jedoch funktioniert dies nur mir dem rechten Bereich des Bildes. Ich sehe meinen Fehler einfach nicht.
Mit img.getSubimage(x, 0, width-x, height) bekomme ich nur den rechten Rand abgeschnitten was ich nicht verstehe (x ist der Abstandf von der linken Seite) . Siehe folgenden Code:

Code:
    BufferedImage takePicture(JPanel panel) {
        BufferedImage img = new BufferedImage(panel.getWidth(), panel.getHeight(), BufferedImage.TYPE_INT_RGB);
        BufferedImage imgNeu = img.getSubimage(440, 0, img.getWidth()-440 , img.getHeight());
       
        panel.print(imgNeu.getGraphics()); // or: panel.printAll(...);
        try {
            ImageIO.write(imgNeu, "jpg", new File("Test.jpg"));
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return imgNeu;
    }

Vielen Dank für Eure Hilfe im Voraus!
 
Ich kann das so nicht nachvollziehen.
Bei meinem Testbild fehlt nach Ausführen des Codes der linke Bereich in der Größe von 440 Pixeln...
Ich hab das noch nicht mit dem JPanel probiert, aber das Test.jpg sieht korrekt aus.
 
Das ist echt seltsam. Hier mein Code:
Code:
try
        {
            BufferedImage img = ImageIO.read( new File( "C:/Users/admin/Pictures/TestAlt.jpg" ) );

            BufferedImage imgNeu = img.getSubimage( 440, 0, img.getWidth() - 440, img.getHeight() );

            JPanel panel = new JPanel();
            panel.printAll( imgNeu.getGraphics());
           
            ImageIO.write( imgNeu, "jpg", new File( "C:/Users/admin/Pictures/Test2.jpg" ) );
        }
        catch ( IOException e )
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
Arbeitest du davor auch schon mit BufferedImages?
Ich hatte mal ein Phänomen, dass ein zuvor angezeigtes Bild angezeigt wurde, obwohl ein neues geladen wurde. Das lag letztendlich daran, dass BufferedImages Informationen cached.
Probier mal, vorher
img.flush() bzw. imgNeu.flush()
aufzurufen.
 

Anhänge

  • Test2.jpg
    Test2.jpg
    197,6 KB · Aufrufe: 31
  • TestAlt.jpg
    TestAlt.jpg
    207,5 KB · Aufrufe: 16
Danke erts einmal für deine tolle Hilfe.
Seltsam ist auch, dass selbst wenn ich mir die Datei über ImageIO.read reinhole, es den rechten Bereich abschneidet. Komisch.
Nein ich nutze an der Stelle zum ersten Mal ein BufferedImage. Eigentlich möchte ich ja einfach nur einen bestimmten Teil meines JPanels ausdrucken.

Die flush()-Funktionen haben leider nichts bewirkt.
 

Zurück
Oben