Hi,
Ich versuche gerade einen 16-Bit HighColor Wert in eine 32-Bit TrueColor Farbe zu konvertieren. Aber irgendwas stimmt da was nicht.
Meinen Informationen zufolge ist eine 16-Bit Farbe so aufgebaut:
RRRRR GGGGGG BBBBB
Meine Funktion sieht so aus:
Delphi-Quellcode:
function HighColorToTrueColor(AColor: Word): TRGBQuad;
begin
Result.rgbRed := ((AColor and $F800) shr 11) * Round(255/31);
Result.rgbGreen := ((AColor and $07E0) shr 5) * Round(255/63);
Result.rgbBlue := (AColor and $001F) * Round(255/31);
end;
Das müsste meinen Berechnungen zufolge auch hinhauen... Jetzt habe ich mir mal mit Photoshop ein pinkes 16-Bit Bitmap erstellt und im Hex-Editor geladen:
Pink (255 0 255): 1F 7C
IntToBin($1F7C) =
00011 111011 11100
Das kann aber ja nicht stimmen. Dieses Pink müsste ja dann eigentlich so aussehn:
11111 000000 11111
=> F8 1F
Jetzt bin ich etwas verwirrt
PS: Ach ja für $F81F liefert meine Funktion Pink, also funktioniert sie.
PPS: Wenn man die beiden Bytes umdreht:
0111110000011111
Ok alles klar.. Antworten könnt ihr euch sparen
Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."