Gå til innhold

Anbefalte innlegg

Jeg holder på med et program som skal lese en dds fil

det er en bilde fil som inneholder pixler i forskjelige formater.

fks

R 10 bit

G 10 bit

B 6 bit

 

problemet er at det mange formater og det hadde vært fint å fått en felles måte å behandle alle formatene på

 

hitil har jeg gjor det slik

 

struct DXTR4G4B4
{
 unsigned short r : 4;
 unsigned short g : 4;
 unsigned short b : 4;

 inline void ToR8G8B8( const DXTR8G8B8& in )
 {
 	r = in.r >> 4;
 	g = in.g >> 4;
 	b = in.b >> 4;
 }
};

 

prinsippet er at jeg skal convertere til felles formatet RGB på 8 bit hver

og koverter verdiene med bitshift antall opp eller ned slik at jeg får 8

 

jeg vurderte å konvertere til float som felles variable, men vil helst ungå dette.

 

takker for alle svar

Lenke til kommentar
Videoannonse
Annonse

vanligvis ser RGBA16 slik ut:

r5

g6 (dette er grunnen til at Voodoo og GeForce 2 grafikk ser litt grønt ut i 16-bit)

b5

eller

r5

g5

r5

x1

 

det finnes også med 1 bit alpha (selvsagt) men det har jeg aldri sett før

 

Men uansett må du multiplisere opp verdiene slik:

 

4 bit : x16 (16 x 16 = 256)

5 bit : x8 (32 x 8 = 256)

6 bit : x4 (64 x 4 = 256)

 

for å få det til RGB24/32

 

hvorfor skriver du unsigned short?

skrives det ikke bare slik?

struct rgb16
{
 unsigned : 4 r;
 unsigned : 4 g;
 unsigned : 4 g;
};

Lenke til kommentar

egentlig skulle struct se slik ut

struct DXTX4R4G4B4
{
unsigned short : 4 x;
unsigned short : 4 r;
unsigned short : 4 g;
unsigned short : 4 g;
};

 

Jeg bruker short så antall bit ikke overstiger 16 siden det største formatet jeg skal lese er Rgb 16 * 4 og jeg syntes det blir lettere å finne feil siden compilatoren lyser rødt hvis jeg overfører den til noe mindre int (mulig bare en uvane jeg har :hmm: )

 

for å ta hele historien så angies DDS pixlene av en 32 bit bitfelt som ser noe slik ut

R 0x000000FF
G 0x0000FF00
B 0x00FF0000
A 0xFF000000

og så en verdi som angir antall bit pr pixel

 

så det jeg kikker etter en effektiv måte å kovertere rådataene til fks R8G8B8

uten å måtte hard kode vært enkelt format (som det er en god del av :cry: )

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...