Palette aus Bild extrahieren

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Heyho,
wisst ihr wie man aus einem Bild die RGB-Palette herausbekommt? Lässt man for-Schleifen darüber laufen und in ArrayList die Pixel abspeichern, dauert das zu lange. Die Bilder sind sehr groß! Rechenzeiten > 15 Sekunden.

Grüße
 
G

Gast

Gast
Ich habe eine halbwegs zufriedenstellende Lösung gefunden. Immerhin habe ich die Zeit auf weniger als eine halbe Sekunde reduzieren können. getRawMap() liefert ein einfaches BufferedImage mit reingezeichnetem png-Bild.
Gibt es noch andere Möglichkeiten?

Code:
           long t1 = System.currentTimeMillis();            
            Integer integer;
            byte [] pixelsB = ((DataBufferByte) this.getTileMap().getRawMap().getRaster().getDataBuffer()).getData();
            int  [] pixelsI = new int[pixelsB.length];
            
            for (int i = 0; i < pixelsB.length; i++) {
                pixelsI[i] = ((Byte) pixelsB[i]).intValue();
                integer = pixelsI[i];
                this.colorList.add(integer);
            }   
            this.colorList = new ArrayList<Integer>(new LinkedHashSet<Integer>(colorList));   /* löscht multiple Einträge */
            
            System.out.println(this.colorList.size());
            integer = null;
            pixelsB = null;
            pixelsI = null;
            System.out.println("RGB's zählen: Verarbeitungszeit: " + (System.currentTimeMillis() - t1) + " ms");
 
G

Guest

Gast
Der zuvor gepostete Code klappt doch nicht. Ich bekomme byte-Werte, die sich nicht in new Color(...) einsetzen lassen.
Wenn ich allerdings anstelle
Code:
byte [] pixelsB = ((DataBufferByte) this.getTileMap().getRawMap().getRaster().getDataBuffer()).getData();
die int-Variante wähle, schmeißt dir mir exception:
Code:
int [] pixels = ((DataBufferInt) this.getTileMap().getRawMap().getRaster().getDataBuffer()).getData();

Code:
Exception in thread "Thread-2" java.lang.ClassCastException: java.awt.image.DataBufferByte

Eigentlich sollte das Casten doch funktionieren ???:L
 

Marco13

Top Contributor
Es wäre gut, wenn man wüßte, welchen Typ das BufferedImage hat. Im Idealfall sollte der Typ bekannt sein. Wenn es ein BufferedImage.TYPE_INT_RGB ist, könnte man sich dann mit getDataEelments direkt die Pixel holen. VIELLEICHT wäre es auch effizienter, diese Pixel dann direkt in eine HashSet einzufügen, statt erst eine riiiiiesige Liste zu erstellen, und am Ende die doppelten zu löschen.
Code:
            long t1 = System.currentTimeMillis();            
            int pixels[] = this.getTileMap().getRawMap().getRaster().getDataElements(0,0,widht,height,null);
            HashSet<Integer> pixelSet = new HashSet<Integer>();
            for (int i = 0; i < pixels.length; i++) {
                pixelSet.add(pixels[i]);
            }   
            this.colorList = new ArrayList<Integer>(pixelSet);
            
            System.out.println(this.colorList.size());
            System.out.println("RGB's zählen: Verarbeitungszeit: " + (System.currentTimeMillis() - t1) + " ms");
 
G

Gast

Gast
Der Typ des BufImg ist TYPE_INT_ARGB.
Die Verkürzung mit dem HashSet habe ich realisiert und macht natürlich Sinn. Statt
Code:
getRaster().getDataElement
habe ich
Code:
getRGB(0, 0, w, h, pixels, 0, w)
. Geschwindigkeiten beider werde ich noch testen. Wobei ich nicht glaube, dass diese sich sehr stark unterscheiden werden.

Danke dir für die Hilfe :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Bild wird nicht geladen Spiele- und Multimedia-Programmierung 4
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
J OpenGL Bild wird nicht richtig angezeigt Spiele- und Multimedia-Programmierung 2
S Wie kann ich ein Bild in einen Frame einfügen? Spiele- und Multimedia-Programmierung 2
U DPI von einem Bild definieren Spiele- und Multimedia-Programmierung 5
J Bild ohne Quallitätsverlust skalieren Spiele- und Multimedia-Programmierung 11
Silvascus Bild --> JFrame Hintergrund Spiele- und Multimedia-Programmierung 3
D getsubimage aus BufferedImage und Rueckwandlung in ein ImagePlus bild Spiele- und Multimedia-Programmierung 0
A Bild(sequenz) wird nicht geladen Spiele- und Multimedia-Programmierung 1
windl EXIFF Header in ein Bild schreiben Spiele- und Multimedia-Programmierung 0
L Bild in Richtung Maus drehen Spiele- und Multimedia-Programmierung 4
B Bild ohne Image auf die Festplatte streamen Spiele- und Multimedia-Programmierung 4
R [lwjgl] Cursor -> versetzt Zeichnen / Bild ist umgedreht Spiele- und Multimedia-Programmierung 2
F [JMyron] Bild von int[] zu BufferedImage Spiele- und Multimedia-Programmierung 2
Hoppelmann Alphamap (Bild) für 3D-Terrain generieren Spiele- und Multimedia-Programmierung 2
K Bild von USB-Webcam über JMF Spiele- und Multimedia-Programmierung 2
M Farbwerte für Flächen aus einem Bild erkennen Spiele- und Multimedia-Programmierung 3
S Wolken Bild/Grafik vom Programm erstellen lassen Spiele- und Multimedia-Programmierung 11
P Bild Pixelweise auslesen Spiele- und Multimedia-Programmierung 13
K Bild berührt Bild Spiele- und Multimedia-Programmierung 29
aze Nicht rechteckiges Bild zeichnen Spiele- und Multimedia-Programmierung 5
A Bild einer Webcam auffangen Spiele- und Multimedia-Programmierung 20
B Generierung einer Wertetabelle aus einem Bild Spiele- und Multimedia-Programmierung 3
lumo LWJGL - Bild rendern Spiele- und Multimedia-Programmierung 16
A .jpg-Bild auf andere Position verschieben Spiele- und Multimedia-Programmierung 4
F Bild im sourcecode Spiele- und Multimedia-Programmierung 32
F Bild einfärben Spiele- und Multimedia-Programmierung 5
J JOGL - Bild wird immer wieder weiß Spiele- und Multimedia-Programmierung 2
Q Rechteck in BIld suchen Spiele- und Multimedia-Programmierung 8
M Bild kopieren Spiele- und Multimedia-Programmierung 2
S Bild capturen mit direcShow Spiele- und Multimedia-Programmierung 2
B Character Bild links/rechts Spiele- und Multimedia-Programmierung 19
Developer_X Bild Größe einstellen Spiele- und Multimedia-Programmierung 2
ARadauer bild in bild suchen Spiele- und Multimedia-Programmierung 6
M 2D - Bild um y-Achse drehen Spiele- und Multimedia-Programmierung 9
S Bild spiegeln Spiele- und Multimedia-Programmierung 7
N Farberkennung und -ersetzung in einem Bild Spiele- und Multimedia-Programmierung 2
A Wasserzeichen auf Bild Spiele- und Multimedia-Programmierung 2
G Paintsurface ins Bild konvertieren Spiele- und Multimedia-Programmierung 8
M Sich nach links verschiebendes Bild Spiele- und Multimedia-Programmierung 2
F Bild generieren Spiele- und Multimedia-Programmierung 3
J Animation hinter transparentem Bild auf der GlassPane Spiele- und Multimedia-Programmierung 6
A Kein Bild Spiele- und Multimedia-Programmierung 3
T Bild als mehrdimesionaler Array Spiele- und Multimedia-Programmierung 4
H Bild von Webcam laden Spiele- und Multimedia-Programmierung 4
P Bild, Pixel- / Bereichsfarbe auslesen Spiele- und Multimedia-Programmierung 12
G start Bild einfrügen in ein Java Spiel Spiele- und Multimedia-Programmierung 7
Quaxli off-topic: HDR-Bild errechnen Spiele- und Multimedia-Programmierung 3
P linie in bild zeichnen Spiele- und Multimedia-Programmierung 2
G Auf Tastendruck bild verschieben Spiele- und Multimedia-Programmierung 5
O ich hab da ein problem mit nem bild Spiele- und Multimedia-Programmierung 8
C JPEG oder BMP Bild erstellen Spiele- und Multimedia-Programmierung 5
A Bild im Raum darstellen (Texture2D) Spiele- und Multimedia-Programmierung 4
V Wie berechnet man das Bild eines Schwarzen Loches in Java? Spiele- und Multimedia-Programmierung 10
K Einzelne Pixel in einem Bild lesen Spiele- und Multimedia-Programmierung 5
N Bild zu zeichnen (drawImage) klappt nur manchmal?? Spiele- und Multimedia-Programmierung 8
P repaint verschiebt das Bild Spiele- und Multimedia-Programmierung 2
S BMP-Bild Pixel für Pixel bearbeiten Spiele- und Multimedia-Programmierung 1
P 2D Bild drehen Spiele- und Multimedia-Programmierung 4
M durchsichtiges Bild nach clearRect Spiele- und Multimedia-Programmierung 8
M RGB-Bild in Graustufen-Bild umwandeln Spiele- und Multimedia-Programmierung 2
M Bild-Spiegelung mit Java! Spiele- und Multimedia-Programmierung 5
S Bild auf Bild = Nichts? Spiele- und Multimedia-Programmierung 3
S Bild in Speicherbild zeichnen = Nichts? Spiele- und Multimedia-Programmierung 3
N Bild im Panel ändern Spiele- und Multimedia-Programmierung 3
D nicht 4-eckiges bild auf Hintergrund bewegen Spiele- und Multimedia-Programmierung 2
R Bild drehen Spiele- und Multimedia-Programmierung 24
J Bild generieren Spiele- und Multimedia-Programmierung 5
X Bild auf aktueller position drehen Spiele- und Multimedia-Programmierung 2
K Java2d Bild als JPG oder so speichern Spiele- und Multimedia-Programmierung 10
R Bilder aus animierter .gif extrahieren? Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen


Oben