[gelöst] Anzahl der Farben reduzieren. Aber wie?

Alles rund um die Programmierung mit Qt
Antworten
Marc Schubert
Beiträge: 30
Registriert: 18. Mai 2005 10:00
Wohnort: Hannover

[gelöst] Anzahl der Farben reduzieren. Aber wie?

Beitrag von Marc Schubert »

Hallo,

ich möchte die Farben in einem QImage auf 16 Reduzieren. Auf 8 bit also 256 Farben geht ja wunderbar mit QImage convertDepth. Nun möchte ich aber nur 16 Farben haben. Wie kann ich die Zahl weiter reduzieren? Hat jemand einen link auf einen Algorithmus der mir helfen könnte?

Warscheinlich werde ich mit einer Palette arbeiten müssen. Aber wie nutze ich diese? Wie wähle ich die richtigen Farben aus?

Vielen Dank im voraus

Marc
Zuletzt geändert von Marc Schubert am 14. Juni 2005 14:49, insgesamt 1-mal geändert.
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Wenn es sich um ein Grauwertbild handelt, kannst du die Farben linear quantisieren, dafür erstellt du eine Farbtabelle, die ungefähr so belegt ist:
######################
Index Farbwert
0 qRgb(0,0,0)
1 qRgb(0,0,0)
...
8 qRgb(8,8,8)
9 qRgb(8,8,8)
....
16 qRgb(16,16,16)
17 qRgb(16,16,16)
....
usw.
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Blöde Smiles bedeuten selbstverständlich eine 8
Marc Schubert
Beiträge: 30
Registriert: 18. Mai 2005 10:00
Wohnort: Hannover

Beitrag von Marc Schubert »

Vielen Dank erstmal,

er handelt sich um ein Farbbild 24 bit. Mit QT hab ich es schon auf 256 Farben
herunter bekommen. Es soll aber nur 16 Farben haben.

Wie ermittle ich die 16 Farben, die über bleiben sollen? ( Und wie änder ich Sie am einfachsten?)

Ist linear quantisieren das richtige Wort für den Vorgang?

Wo finde ich über sowas Informationen?

MfG

Marc Schubert
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Bei 24-Bit Bildern must genauso vorgehen, bloß für alle 3 Kanäle und ohne Farbpalette:

QRgb rgb = pixel(x,y);

int red = qRed(rgb);
int green = qGreen(rgb);
int blue = qBlue(rgb);

red = (red%16) < 8? (red >> 4) << 4 : ( red >> 4) << 5;
green = (green%16) < 8? (green >> 4) << 4 : ( green >> 4) << 5;
blue= (blue%16) < 8? (blue>> 4) << 4 : ( blue >> 4) << 5;
setPixel(x,y, qRgb(red,green,blue));

und so für das ganze Bild....
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Du brauchst auch nicht mehr auf 256 Farben herunterzuskalieren...
Marc Schubert
Beiträge: 30
Registriert: 18. Mai 2005 10:00
Wohnort: Hannover

Beitrag von Marc Schubert »

Danke das werd ich mal probieren.

Wo hast du das gefunden? Gibt es dafür eine Dokumentation? Ich würd mich gern mehr damit beschäftigen.

Danke nochmal

Marc
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

[quote="Marc Schubert"]Danke das werd ich mal probieren.

Wo hast du das gefunden? Gibt es dafür eine Dokumentation? Ich würd mich gern mehr damit beschäftigen.

Danke nochmal

Marc[/quote]

das hab ich aus dem Kopf geschrieben, aber es gibt sicherlich auch irgend welche Publikationen zum Thema Farbraumquantizierung.... Mass man halt nach sowas suchen...
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Wenn man ewig mit Qt arbeitet sieht man den Code vor sich. :D

lepsai ist in grafischen Dingen hier der Beste. Nicht, das ich mich jetzt bei allen anderen unbeliebt mache: Zumindest der hier ab und an postet :!:
Marc Schubert
Beiträge: 30
Registriert: 18. Mai 2005 10:00
Wohnort: Hannover

Beitrag von Marc Schubert »

dann will ich mal hoffen das sich diese Fähigkeit bei mir auch noch einstellt :) . Wäre ja nicht ganz unpraktisch. Naja aber nach ca. 2 Monaten runspielen bin ich aber soweit zufrieden mit mir.

Gruß

Marc
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Bestimmt.
Antworten