Velena Skrevet 29. juni 2011 Del Skrevet 29. juni 2011 Jeg holder på å skrive en funksjon som vil gi meg en array med bare RGB verdiene til en gitt BMP fil. Dette virker greit i utgangspunktet, men jeg har støtt på et problem som jeg ikke vet hvordan jeg skal løse. Enkelt sagt kan hvert pixel representeres av 1, 4, 8, 16, 24,eller 32 bits, men jeg vet bare hvordan jeg kan lese hele bytes ut av FILE streamen(fread(). Spørsmålet mitt er da hvordan jeg kan lese hvert pixel, også om de er representert av bare 1 eller 4 bits? Lenke til kommentar
GeirGrusom Skrevet 29. juni 2011 Del Skrevet 29. juni 2011 (endret) struct bit4 { unsigned first : 4; unsigned second : 4; }; edit: evuentelt char value = readbyte(); char lower = byte & 0x0F; char higher = (byte & 0xF0) >> 4; Endret 29. juni 2011 av GeirGrusom Lenke til kommentar
etse Skrevet 29. juni 2011 Del Skrevet 29. juni 2011 #include <iostream> using namespace std; unsigned char getPixelFromChar(unsigned char number, int pos, int bitsPerPixel) { char offset = (8/bitsPerPixel - pos - 1)*bitsPerPixel; unsigned char mask = (~(0xFF << bitsPerPixel)) << offset; return (number & mask) >> offset; } int main() { char number = 0xFE; for(int x=0; x<4; x++) cout << (int)getPixelFromChar(number, x, 2) << " "; int y; cin >> y; } Her har du en funksjon "getPixelFromChar". Det denne gjør er at den tar som input en 8 bits (1 byte) char og leser ut en bestemt pixel fra den på possisjonen du ønsker. Om det bilde f.eks. har 4 bits per pixel. legger du ved 4 i funksjonen. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå