[Delphi] TColor (integer) naar RGB waarden?

Pagina: 1
Acties:
  • 121 views sinds 30-01-2008
  • Reageer

  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 30-07 19:19
Hallo,

Ik wil een TColor (= integer) omzetten naar 1 palette en 3 byte waarden voor RGB. Het TColor type zit (volgens de handleiding) als volgt in elkaar :

De eerste byte bevat het palette type. Dit mag 0, 1 of 2 zijn. Bytes 2 TM 4 bevatten een RGB waarde. Dus deze integer (hexadecimaal 01FFEE99) geeft aan dat palette type 1 is gebruikt, roodwaarde is FF, groenwaarde is EE, blauwwaarde is 99.

Nou dacht ik de conversie als volgt te doen : een record aanmaken met 4 Byte waardes, en dat record de waarde van de TColor toewijzen. Dat record ziet er dus als volgt uit :
code:
1
2
3
type PRGB = record
Palette, Red, Green, Blue : Byte;
end;

Ze hebben dezelfde grootte, dus technisch gezien is het geen probleem lijkt mij. Punt is dat de compiler het niet pikt.

Wie weet een methode om dit met zo min mogelijk CPU-time gebruik op te lossen? Delen of typeconversies zijn allebei wel mogelijk, maar ik heb snelheid nodig...

Genoeg is meer dan veel, en tart den overvloed


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

De compiler pikt wat niet?

wat ideeen:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
type
   PRGB = ^TRGB;
   TRGB = record
       Palette, Red, Green, Blue: Byte;
   end;

   TRGBUnion = record
     case
      0: Color: TColor;
      1: Palette, Red, Green, Blue: Byte;
      end;
   end;

var Kleur: TColor;
      RGB: PRGB;
      T: TRGBUnion
begin
  RGB := @Kleur;

  T.Color  := Kleur;
  ShowMessage(IntToStr(T.Red));
end;


PS: ColorToRGB maakt er een WinAPI longint van. Heb je daar misschien iets aan?

We adore chaos because we like to restore order - M.C. Escher