Capire di più sul codice dell'esempio da te segnalato..
Riguardo al codice da te segnalato, cerchiamo di comprendere brevemente perché sia necessario spostarsi al 17° byte (indice 16) dell'area di memoria puntata dal Puntatore
XImage.
Bisogna innanzitutto tenere in consideratione la omonima Struttura
XImage restituita dalla funzione "XGetImage()", che può essere presa in visione qui:
http://tronche.com/gui/x/xlib/graphics/images.html#XImageEbbene, il quinto membro di detta Struttura
char *data; /* pointer to image data */
è, come si nota, una variabile
Puntatore di tipo
Char, che contiene l'indirizzo dell'area di memoria ove sono stipati i dati dell'immagine mostrata dalla
DrawingArea.
Va precisato che, come evidente, nell'esempio in Gambas noi operiamo semplicemente sull'area di memoria riservata dalla predetta funzione "
XGetImage()" e puntata dall'apposita variabile
XImage. Insomma, non abbiamo passato una variabile di tipo
Struttura (come in realtà è previsto nella libreria esterna di X11), ma semplicemente un
Puntatore all'area di memoria riservata coerentemente corrispondente a quella della omonima
Struttura prevista dalla funzione "
XGetImage()".
Perché dobbiamo spostarci al byte di indice 16 per leggere il valore di quell'indirizzo di memoria ?
La risposta è nei quattro membri precedenti, i quali sono tutti di tipo
Intero, e pertanto occupano ciascuno 4 byte di memoria e complessivamente: 4 * 4 = 16 . Il valore del
Puntatore (ossia l'indirizzo di memoria dei dati grezzi dell'immagine puntati dalla omonima Struttura "
XImage" della libreria esterna di X11), che a noi interessa, si trova a cominciare da 17° byte (indice 16 ovviamente).
Il valore dell'indirizzo di memoria verrà da noi salvato nel tipo di variabile a ciò deputato: ...il
Puntatore, e così passato alla successiva funzione "
imlib_create_image_using_data()", come da essa richiesto.