Gå til innhold

Hente ut deler av int


Anbefalte innlegg

Jeg holder på med bildebehandling og bruker et bibliotek som gir ut RGBA-verdiene i én int-verdi. Når jeg viser de som heksadesimal:

cout << hex; 
   cout << "RGBA: " << ptRgba[0];

 

får jeg ut feks

 

RGBA: bcbcbcff

 

der R=bc, G=bc, B=bc og A = ff.

 

Finnes det en måte å hente ut de forskjellige verdiene fra en slik int? Altså hente ut de første åtte bitsene og lagre de for seg, og så de neste åtte bitsene og lagre for seg osv.

Endret av yssi83
Lenke til kommentar
Videoannonse
Annonse
Jeg holder på med bildebehandling og bruker et bibliotek som gir ut RGBA-verdiene i én int-verdi. Når jeg viser de som heksadesimal:

cout << hex; 
   cout << "RGBA: " << ptRgba[0];

 

får jeg ut feks

 

RGBA: bcbcbcff

 

der R=bc, G=bc, B=bc og A = ff.

 

Finnes det en måte å hente ut de forskjellige verdiene fra en slik int? Altså hente ut de første åtte bitsene og lagre de for seg, og så de neste åtte bitsene og lagre for seg osv.

8721016[/snapback]

 

Dersom du har int i = 111 så kan du ta 111/10 = 11 og ta 111-(11*10) som gir det siste siffer 1 osv.

Lenke til kommentar
Jeg holder på med bildebehandling og bruker et bibliotek som gir ut RGBA-verdiene i én int-verdi. Når jeg viser de som heksadesimal:

cout << hex; 
   cout << "RGBA: " << ptRgba[0];

 

får jeg ut feks

 

RGBA: bcbcbcff

 

der R=bc, G=bc, B=bc og A = ff.

 

Finnes det en måte å hente ut de forskjellige verdiene fra en slik int? Altså hente ut de første åtte bitsene og lagre de for seg, og så de neste åtte bitsene og lagre for seg osv.

8721016[/snapback]

 

Det du burde gjøre er å bruke en char peker som du setter til å peke samme sted som int arrayen (hvis det er en array) og så bruker du den istede.

 

Jeg vet ikke helt hvordan du får intene, men du kunne jo eventuelt bare sendt en char array peker istede (hvis du sender en int array).

 

Prinsippet er som koden under.

 

Klikk for å se/fjerne innholdet nedenfor
int main()
{
int RGBA = 0xaabbccdd;//kan godt være en array
char R,G,B,A;
char* pFarge;

pFarge = (char*)&RGBA;
//her kan du ha start loop
R = *pFarge++;// mulig det skal være ABGR (opp mot ned) husker ikke helt :(
G = *pFarge++;
B = *pFarge++;
A = *pFarge; //hvis du skal ha det i en loop må du ha ++ her også
//slutt loop (neste pixel)
   return 0;
}

Lenke til kommentar
Jeg holder på med bildebehandling og bruker et bibliotek som gir ut RGBA-verdiene i én int-verdi. Når jeg viser de som heksadesimal:

cout << hex; 
   cout << "RGBA: " << ptRgba[0];

 

får jeg ut feks

 

RGBA: bcbcbcff

 

der R=bc, G=bc, B=bc og A = ff.

 

Finnes det en måte å hente ut de forskjellige verdiene fra en slik int? Altså hente ut de første åtte bitsene og lagre de for seg, og så de neste åtte bitsene og lagre for seg osv.

8721016[/snapback]

 

Dette kan du også gjøre ved å ANDe bitene du vil hente med 11111111 (0xFF) slik at bare de aktuelle bitene blir igjen. Deretter bitshifter du dem så mange ganger til høyre som er nødvendig for å få igjen den rette verdien.

 

   int R = (ptRgba[0] & 0xFF000000) >> 24;
   int G = (ptRgba[0] & 0x00FF0000) >> 16;
   int B = (ptRgba[0] & 0x0000FF00) >> 8;
   int A = (ptRgba[0] & 0x000000FF);

Lenke til kommentar
Dette kan du også gjøre ved å ANDe bitene du vil hente med 11111111 (0xFF) slik at bare de aktuelle bitene blir igjen. Deretter bitshifter du dem så mange ganger til høyre som er nødvendig for å få igjen den rette verdien.

 

   int R = (ptRgba[0] & 0xFF000000) >> 24;
   int G = (ptRgba[0] & 0x00FF0000) >> 16;
   int B = (ptRgba[0] & 0x0000FF00) >> 8;
   int A = (ptRgba[0] & 0x000000FF);

8721767[/snapback]

 

Det funket som bare det! enkelt og greit. :yes:

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...