(gelöst)5 zu 8 Bits & umgekehrt

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 8265
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

(gelöst)5 zu 8 Bits & umgekehrt

Beitrag von Krishty »

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.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: 5 zu 8 Bits & umgekehrt

Beitrag von Aramis »

>> 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.
Benutzeravatar
Krishty
Establishment
Beiträge: 8265
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: 5 zu 8 Bits & umgekehrt

Beitrag von Krishty »

Jaaa, genau das war’s – die freigewordenen niederwertigsten Bits des Ergebnisses mit den höchstwertigsten Bits des Originals auffüllen. Danke :)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten