Toegang tot beeldgegevens van een bitmap krijgt een pointer

stemmen
0

Mijn probleem is het lezen van de pixel gegevens correct zodra ik de aanwijzer.

Ik heb een beeld dat neemt de hele iPhonescherm en geen alfakanaal (24 bits per pixel 8 bits per component 960 bytes per rij) en wil weten de kleur van een bepaalde pixel.

Ik heb de pointer naar de gegevens

UInt8 *data = CFDataGetBytePtr(bitmapData);

maar nu ben ik niet zeker hoe index in de gegevens correct gegeven een coördineren?

De vraag is gesteld op 12/01/2009 om 18:51
bron van user
In andere talen...                            


1 antwoorden

stemmen
1
UInt8 *data = CFDataGetBytePtr(bitmapData);

unsigned long row_stride = image_width * no_of_channels; // 960 bytes in this case
unsigned long x_offset = x * no_of_channels;

/* assuming RGB byte order (as opposed to BGR) */
UInt8 r = *(data + row_stride * y + x_offset );
UInt8 g = *(data + row_stride * y + x_offset + 1);
UInt8 b = *(data + row_stride * y + x_offset + 2);


/* less portable but if you want to access it in as a packed UInt32, you could do */
UInt32 color = *(data + row_stride * y + x) & 0x00FFFF;  /* little endian byte ordering */
antwoordde op 12/01/2009 om 22:59
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more