(gelöst)5 zu 8 Bits & umgekehrt

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Mathematik, Engine Design, Softwarearchitektur

(gelöst)5 zu 8 Bits & umgekehrt

Beitragvon Krishty » 05.02.2010, 00:48

Hi,

Der Threadtitel ist unklar, aber mit „Unsigned Normalized“ können die meisten ja noch weniger anfangen. Ich möchte Farbkanäle nur mit Bitlogik verbreitern oder schmälern, im speziellen Fall von 8 nach 5 Bits und wieder zurück. Die triviale Methode ist:
Code: Alles auswählen
unsigned int EightToFive(unsigned int Eight) {
    return Eight >> 3;
}
unsigned int FiveToEight(unsigned int Five) {
    return Eight << 3;
}
Das ist zu unpräzise, denn das 5-Bit-Maximum (31) wird nicht zum 8-Bit-Maximum (255), während das Minimum (0) bestehen bleibt.

Irgendwo gab es mal einen Beitrag oder kleinen Artikel dazu, wie man es optimal macht … ich weiß nicht mehr, wo, aber die Chance, dass ich über ZFX darauf gestoßen bin, ist recht hoch – darum frage ich hier wie man es richtig geht oder ob jemand einen Link am Mann hat :)

Gruß, Ky
Zuletzt geändert von Krishty am 05.02.2010, 01:42, insgesamt 1-mal geändert.
„All in all, I had a good life. What do you say the three of us grab a six-pack and watch the universe end?“
– „That's basically what I do every day!“


Kurzartikel – Hochwertiges Rendern von Sternen (mit Demo)
Benutzeravatar
Krishty
 
Beiträge: 1075
Registriert: 26.02.2009, 11:18

Re: 5 zu 8 Bits & umgekehrt

Beitragvon Aramis » 05.02.2010, 01:25

>> Das ist zu unpräzise, denn das 5-Bit-Maximum (31) wird nicht zum 8-Bit-Maximum (255), während das Minimum (0) bestehen bleibt.

Kurz: Skalierung von (0...31) auf (0...255) nur mit Bitoperationen.

31*8 sind 248, also 7 Differenz zum Wunschwert. Also: (8n + 7n/31).
1/4 ist eine sehr gute Annäherung an 7/31. Also sollte

Code: Alles auswählen

unsigned int FiveToEight(unsigned int n) {
   return n << 3u | n >> 2u;
}
 


ein sehr gutes Ergebnis liefern (hier für n==31).
EDIT - Addition durch bitwise-or ersetzt.
Open Asset Import Library (Assimp) - Multiformat 3D Model-Importer
YIANG - Ein Jump'n'Run in ASCII-Grafik
Benutzeravatar
Aramis
Alexander Gessler
Moderator
 
Beiträge: 750
Registriert: 25.02.2009, 19:50
Wohnort: 2011
Benutzertext: Auch als Athos bekannt …

Re: 5 zu 8 Bits & umgekehrt

Beitragvon Krishty » 05.02.2010, 01:38

Jaaa, genau das war’s – die freigewordenen niederwertigsten Bits des Ergebnisses mit den höchstwertigsten Bits des Originals auffüllen. Danke :)
„All in all, I had a good life. What do you say the three of us grab a six-pack and watch the universe end?“
– „That's basically what I do every day!“


Kurzartikel – Hochwertiges Rendern von Sternen (mit Demo)
Benutzeravatar
Krishty
 
Beiträge: 1075
Registriert: 26.02.2009, 11:18


Zurück zu Algorithmen und Datenstrukturen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast