.... occorra saper usare il puntatore Image.Data e il memory stream con il canale alfa tutte cose che so usare in maniera mooolto elementare.
Io non ho detto che sul nostro wiki riguardo al tema non ci sia nulla.Questo lo avevo capito.
Avendo un puntatore ad un immagine, ottenerne l'immagine e non ci sono riuscito.Suggerisco queste pagine della WIKI:
Qualcuno saprebbe indicarmelo?
Avendo un puntatore ad un immagine, ottenerne l'immagine e non ci sono riuscito.Suggerisco queste pagine della WIKI:
Qualcuno saprebbe indicarmelo?
- https://www.gambas-it.org/wiki/index.php?title=Modificare_i_colori_dei_pixel_di_un%27immagine_con_la_propriet%C3%A0_.Data_della_Classe_Image_ed_i_Memory_Stream
- https://www.gambas-it.org/wiki/index.php?title=Creare_un%27immagine_senza_avere_un_file_immagine#Immagine_multicolore
Più in generale sulla risorsa "Memory Stream":
- https://www.gambas-it.org/wiki/index.php?title=Definizione_ed_uso_dei_Memory_Stream
Se hai problemi, fammi sapere.
Ne deduco che avendo il solo Puntatore non sia possibile ottenere l'immagineDetto in questo modo, è un po' ambiguo.
Ne deduco che avendo il solo Puntatore non sia possibile ottenere l'immagineDetto in questo modo, è un po' ambiguo.
...
Insomma la gestione della Proprietà ".Data" della Classe "Image" attraverso la risorsa "Memory Stream" offre la possibilità di gestire i pixel a basso livello, a livello della memoria, operando direttamente sui singoli dati-byte: leggendone i valori semplicemente oppure scrivendoci sopra degli altri.
Un puntatore e' un tipo di dato, una variabile che contiene l'indirizzo
in memoria di un'altra variabile. Si possono avere puntatori a qualsiasi tipo
di variabile.
La dichiarazione di un puntatore include il tipo dell'oggetto a cui il
puntatore punta.
In C ogni variabile ha due tipi di valori: una locazione e un valore
contenuto in quella locazione.
L' operatore & (operatore unario, o monadico) fornisce l'indirizzo di una
variabile.
L' operatore * (operatore indiretto, o non referenziato) da' il contenuto
dell'oggetto a cui punta un puntatore.
... ignorando le dimensioni dell'oggetto?Intendi dire " ignorando la quantità di pixel dell'immagine e dunque dei byte che costituiscono i dati stessi dei pixel " ?
Si esatto, ne approfitto anche per scusarmi per il mio modo tutt'altro che scientifico di esprimermi... ignorando le dimensioni dell'oggetto?Intendi dire " ignorando la quantità di pixel dell'immagine e dunque dei byte che costituiscono i dati stessi dei pixel " ?
Insomma, cosa intendi dire con " dimensioni dell'oggetto " ?
Non dimenticare che la Proprietà ".Data" di un Oggetto "Image" non punta all'Oggetto, come punta la variabile del tipo di tale Oggetto, bensì ad una specifica parte di memoria di quell'Oggetto "Image": l'area dove sono memorizzati i dati-byte afferenti ai pixel dei colori che compongono l'immagine.
Come sappiamo, un conto è l'Oggetto "Image", altra cosa è l'immagine formata (in realtà) dai dati-byte che la costituiscono.
https://www.gambas-it.org/wiki/index.php?title=Gestire_un_oggetto_Image_agendo_direttamente_sulle_risorse_dei_sorgenti_Gambas
Purtroppo ho fatto male a intavolare questa discussione ora in quanto sto lavorando ad altro e su questo tema ho perso interesse.
Per provare il progetto allegato...Si potrebbe usare un esempio più semplice:
Private x As Short
Private y As Short
Private punti As New Short[]
Private im1 As New Image
Private im2 As New Image
Public Sub Form_Open()
DrawingArea1.Cursor = New Cursor(Picture["icon:/16/pen"], 2, 13)
im1 = im1.Load("/percorso/prima/immagine") ' l'immagine di fondo
im2 = im2.Load("/percorso/seconda/immagine") ' l'immagine che copre quella di fondo
End
Public Sub DrawingArea1_Draw()
Dim i As Integer
With Paint
.DrawImage(im1, 0, 0, im1.W, im1.H, 1.0, Null)
.DrawImage(im2, 0, 0, im2.W, im2.H, 0.9, Null)
For i = 0 To punti.Max Step 2
.Brush = .Image(im1)
.Arc(punti[i], punti[i + 1], 16, Rad(0), Rad(360), False)
.Fill
Next
.End
End With
End
Public Sub DrawingArea1_MouseDown()
x = Mouse.X
y = Mouse.Y
End
Public Sub DrawingArea1_MouseMove()
With punti
.Push(Mouse.X)
.Push(Mouse.Y)
End With
DrawingArea1.Refresh()
End
Public Sub DrawingArea1_MouseUp()
With punti
.Push(x)
.Push(y)
End With
DrawingArea1.Refresh()
End