Farben Invertieren per BufferedImageOp

Status
Nicht offen für weitere Antworten.

para_

Bekanntes Mitglied
Hi, habe folgendes Problem:

Ich möchte die Farben eines Bildes invertieren und habe dazu folgendes Codebeispiel aus dem Netz gefunden:

Code:
        short[] invert = new short[256];
        for (int i = 0; i < 256; i++)
            invert[i] = (short)(255 - i);
        BufferedImageOp invertOp = new LookupOp(new ShortLookupTable(0, invert), null);

Um ein BufferedImage zu erhalten wende ich nun folgendes an:
Code:
        invertedImg = invertOp.filter( img, null );

Wenn ich das tue kommt allerdings ein Fehler

Exception in thread "main" java.lang.IllegalArgumentException: Number of color/alpha components should be 3 but length of bits array is 1

Das Bild lese ich ein mit:
Code:
BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_4BYTE_ABGR);
        try {
          File f = new File(file);
          img = ImageIO.read(f);
        } catch (IOException e) {
          System.out.printf ("File not found: %s\n", file);
          System.exit (0);
        }

Natürlich könnte man die Farben auch anders invertieren, wie ich bei der Forensuche gemerkt habe, aber ich möcht es schon ganz gern mit der BufferedImageOp machen, muss ja auch irgendwie gehn
 

Marco13

Top Contributor
Ein kleines, compilierbares Beispiel ist bei sowas immer schön. Oder zumindest der vollständige Stacktrace (obwohl der hier auch nicht viel geholfen hätte). Woran es lag, weiß ich nicht, aber mit einem ByteLookup geht's...
Code:
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;

class ImageInvertTest
{
    public static void main(String args[])
    {
        new ImageInvertTest();
    }


    public ImageInvertTest()
    {
        String file = "test.jpg";
        BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_4BYTE_ABGR);
        try {
          File f = new File(file);
          img = ImageIO.read(f);
          byte[] invert = new byte[256];
          for (int i = 0; i < 256; i++)
              invert[i] = (byte)(255 - i);
          BufferedImageOp invertOp = new LookupOp(new ByteLookupTable(0, invert), null);

          BufferedImage invertedImg = invertOp.filter( img, null );

          ImageIO.write(invertedImg, "jpg", new File("test2.jpg"));


        } catch (IOException e) {
          System.out.printf ("File not found: %s\n", file);
          System.exit (0);
        }

    }
}
 

para_

Bekanntes Mitglied
ok, werde versuchen mich dran zu erinnern für nächstes mal :)

erstmal danke, so gehts :)
 

hansblub

Mitglied
habe diesen thread per google gefunden.
wie kann ich denn das invertierte bild welches gespeichert wird in einem java-fenster wieder geben??

wie müsste man dies dann umprogrammieren??
 

thE_29

Top Contributor
Die paintComponent Methode überschreiben und dort das BufferedImage via drawImage reinpinseln!
Wenn Buffered nicht geht, das vorhin in ein Image drawen! Bin grad zu faul zum Gucken ;)
Aber such einfach nach Image paintComponent
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Farben eines ganzen BufferedImage invertieren Java Basics - Anfänger-Themen 2
A Vorkommende Farben ermittel und als Array zurückgeben Java Basics - Anfänger-Themen 7
Fats Waller Farben mixen für den Hintergrund ? Java Basics - Anfänger-Themen 1
C Farben als Enum Java Basics - Anfänger-Themen 3
O JTable in Excel mit Farben Java Basics - Anfänger-Themen 8
L Input/Output Konsole in Farben schreiben Java Basics - Anfänger-Themen 4
L Input/Output In Farben schreiben Java Basics - Anfänger-Themen 3
M Farben/Color Abfragen von Farben innerhalb einer Methode Java Basics - Anfänger-Themen 9
M Hilfe bei Zählen von Farben? Java Basics - Anfänger-Themen 7
A Farben wechseln mit JButton Java Basics - Anfänger-Themen 2
L farben 0xff000000 Java Basics - Anfänger-Themen 2
O Verschiedene Farben in einer GUI Java Basics - Anfänger-Themen 15
Dogge Farben-Spiel Java Basics - Anfänger-Themen 20
L Input/Output [SWT] Mehrere Farben im Text Java Basics - Anfänger-Themen 2
D Mehrere verschiedene Farben pro fillRect Java Basics - Anfänger-Themen 3
C RGB Farben Java Basics - Anfänger-Themen 4
K Farben in Variablen speichern Java Basics - Anfänger-Themen 15
S Wort in zwei farben aufleuchten lassen Java Basics - Anfänger-Themen 2
A Mehrere verschieden Farben / Textfeld Java Basics - Anfänger-Themen 2
B Farben vergleichen Java Basics - Anfänger-Themen 5
B Hex in Int und Farben abschwächen Java Basics - Anfänger-Themen 7
Developer_X in JEditorPane verschiedene Farben, verwenden Java Basics - Anfänger-Themen 7
J list mit unterschiedlichen farben Java Basics - Anfänger-Themen 6
G Applet und Farben Java Basics - Anfänger-Themen 7
M Raster mit zufälligen Farben Java Basics - Anfänger-Themen 4
L Farbverlauf in Java mit RGB Farben Java Basics - Anfänger-Themen 3
L JLabel mit unterschiedlichen Farben Java Basics - Anfänger-Themen 4
K Schrift und Farben im Frame (Anfänger) Java Basics - Anfänger-Themen 2
S Problem mit PNG (16mio farben.) Java Basics - Anfänger-Themen 4
R Farben in einem Applet Java Basics - Anfänger-Themen 6
E Scrollbar- Farben Java Basics - Anfänger-Themen 5
I Farben bei der Console Java Basics - Anfänger-Themen 2
G Buttons und Farben Java Basics - Anfänger-Themen 6
G buttons mit wechselnden farben belegen Java Basics - Anfänger-Themen 3
Dilandau konstante eigene farben im programm definieren Java Basics - Anfänger-Themen 13
L Methode zum invertieren eines Arrays Java Basics - Anfänger-Themen 7
H Knoten-Reihenfolge einer LinkedList invertieren Java Basics - Anfänger-Themen 11
G Stack invertieren Java Basics - Anfänger-Themen 3
G verkettete Liste - invertieren Java Basics - Anfänger-Themen 2
Z mehrdimensionales Array, Matrix "invertieren" Java Basics - Anfänger-Themen 4
G Im Zeichenarray Leerzeichen invertieren Java Basics - Anfänger-Themen 5
S Stack invertieren Java Basics - Anfänger-Themen 14
G Farbe invertieren? Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben