Quello che mi serve, però, non è un'immagine salvata su disco, bensì una Picture (o Image)
Qualcuno mi può spiegare come posso generare un Picture utilizzando quel puntatore 'imago'
credo mi serva una funzione della libreria "libImlib2.so.1.4.6", ma non so quale...
Molto interessante la questione, ed anche molto tosta.
Ad ogni modo è più opportuno e... più agevole utilizzare delle due librerie, previste in quella pagina citata della WIKI, la libreria del sistema grafico X11.
Ne ho approfittato per creare una nuova pagina:
http://www.gambas-it.org/wiki/index.php?title=Passare_direttamente_ad_un_oggetto_Image_i_dati_grezzi_dei_pixel_di_una_DrawingArea_mediante_le_risorse_del_API_di_X11
con i puntatori non sono mai andato molto d'accordo...
Una variabile di tipo Puntatore non è altro che una normale variabile contenente l'indirizzo di memoria di una variabile primitiva, predefinita:
Dim i As Integer
Dim p As Pointer
i = 99
p = VarPtr(i)
Print p
oppure può contenere l'indirizzo della prima cella di memoria di un'area di memoria appositamente allocata dal programmatore:
Dim p As Pointer
p = Alloc(SizeOf(gb.byte), 8)
Print p
Free(p)
vuott, forse ho messo "[RISOLTO]" con troppo entusiasmo ieri.... c'è un problema:
tutto funziona esclusa l'assegnazione della picture al PictureBox1
mi spiego meglio: se dopo la generazione dello stream inserisco questa riga:
im.Save("/tmp/prova.jpg", 100)
l'immagine viene salvata correttamente; quindi la procedura funziona.
ma se provo ad assegnare la picture al PictureBox1, questo resta vuoto!
PictureBox1.Picture = im.Picture
Questo proprio non me lo spiego... :nono:
Non ho dubbi che tu abbia testato il codice... ma te lo chiedo lo stesso: a te funziona?
Forse così?:
PictureBox1.Picture = Picture[im.Picture]
;D non mi sono accorto che mi era rimasto un Picture nella tastiera.
Del resto se ti funziona nella creazione del file immagine, vuol dire che il procedimento di attribuzione dei dati grezzi, afferenti ai pixel del disegno presente sulla DrawingArea, è andato a buon fine.
Infatti confermo: la procedura funziona e salva correttamente l'immagine.
Attenzione a non far sovrapporre la DrawingArea all'oggetto PictureBox.
Va ben tutto... ma proprio così pollo ? ;D ;D ;D
Alla fine lascio [RISOLTO], perché effettivamente la procedura è corretta (almeno per quanto riguarda la generazione dell'immagine),
ma a me, personalmente, questa riga non funziona:
PictureBox1.Picture = im.Picture
ma almeno, temporaneamente, risolvo con il salvataggio e recupero dell'immagine.
Comunque resta il mistero :hatecomputer: - Possibile che dipenda da una mia configurazione?
Fai una controprova: carica un file immagine in un oggetto Image; quindi caricati quei dati dall'oggetto Image in una PictureBox utilizzando quel medesimo comando.
Dim miaimage As Image
miaimage = Image.Load("/tmp/prova.jpg")
PictureBox1.Picture = miaimage.Picture
Funziona perfettamente :-\
...una versione per i386...
Prova i due codici comunque così come sono.
In caso di problemi o di risultato negativo, sostituisci il valore 16, presente una volta nel primo codice e due volte nel secondo, con la seguente funzione: SizeOf(gb.Pointer) * 2)
Pertanto ad esempio nel primo codice avremo:
dati_imm = Pointer@(XImage + (SizeOf(gb.Pointer) * 2))
...prova però prima con l'originario valore 16.
Capisco, a me funzionano entrambi i codici sia con Mint 17.3 che con Mint 18.
Nel caso della libreria matematica il problema sorgeva con Mint 18 ed era necessario inserire nella dichiarazione della libreria anche il numero di versione (6). Nel caso dei due codici la versione è completamente espressa nei suoi numeri identificatori. Resta comnque il fatto che a me con Mint 18 funzionano. :-\
Risposta da Xubuntu:
~$ locate libImlib2.so
/usr/lib/i386-linux-gnu/libImlib2.so.1
/usr/lib/i386-linux-gnu/libImlib2.so.1.4.7
:-X