Guten Tag allerseits
Schönes Forum habt ihr hier. Ich hoffe, ihr könnt mir auch bei meinem Problem helfen.
Ich möchte meine Klasse gerne die Farben eines Bildes zählen lassen. Dazu habe ich es mittels ImageIO in ein BufferedImage geladen. Pixels ist das Array aus dem zugehörigen DataBufferByte.
Wie die Experten unter euch sicherlich sehen können, ist diese Schleife irrsinnig lahm. Was kann ich besser machen?
Ich habe auch mal daran gedacht, die byte[]->Integer-Konversion rauszulassen und eine ArrayList von byte[] zu verweden. Allerdings verlängert das Erstellen so vieler Byte-Arrays (für die RGB-Komponenten) die Rechenzeit auf das Doppelte. Vermutlich sind hilfreiche Tipps ganz simpel; verzeiht mir, dass ich sie nicht kenne oder sehe.
Schönes Forum habt ihr hier. Ich hoffe, ihr könnt mir auch bei meinem Problem helfen.
Ich möchte meine Klasse gerne die Farben eines Bildes zählen lassen. Dazu habe ich es mittels ImageIO in ein BufferedImage geladen. Pixels ist das Array aus dem zugehörigen DataBufferByte.
Wie die Experten unter euch sicherlich sehen können, ist diese Schleife irrsinnig lahm. Was kann ich besser machen?
Code:
farben = new ArrayList<Integer>();
for (int i = 0; i < pixels.length; i+=3) {
int farbe = 0xff000000 | ((pixels[i]&0xff)<<16) | ((pixels[i+1]&0xff)<<8) |(pixels[i+2]&0xff);
if (!farben.contains(farbe)) farben.add(farbe);
}