Ottenere l'effetto della gomma per cancellare in una DrawingArea

Da Gambas-it.org - Wikipedia.

Poste due immagini, anche di diversa dimensione, l'una sull'altra, l'effetto, che si vuol ottenere, è quello di far apparire lungo la parte, percorsa dal cursore del mouse, la porzione dell'immagine sottostante.

Mostriamo un possibile codice pratico:

Private im1 As Image
Private im2 As Image
Private punti As New Short[]


Public Sub Form_Open()

 DrawingArea1.Cursor = New Cursor(Picture["icon:/16/pen"], 2, 13)

 im1 = Image.Load("/percorso/del/primo/file/immagine")    ' L'immagine di fondo
 im2 = Image.Load("/percorso/del/secondo/file/immagine")  ' L'immagine principale che copre quella di fondo

 Me.Resize(Max(im1.W, im2.W), Max(im1.H, im2.H))
 DrawingArea1.Resize(Max(im1.W, im2.W), Max(im1.H, im2.H))

End


Public Sub DrawingArea1_Draw()   
 
 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 As Integer = 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_MouseMove()

 With punti
   .Push(Mouse.X) 
   .Push(Mouse.Y)
 End With

 DrawingArea1.Refresh()

End


Public Sub DrawingArea1_MouseUp() 

 With punti
   .Push(Mouse.StartX) 
   .Push(Mouse.StartY)
 End With

 DrawingArea1.Refresh()

End

Ottenere con la cancellazione l'effetto di un unico colore

Se si vuole ottenere l'effetto di un unico colore durante la cancellazione dell'immagine principale, si potrà impostare - come immagine sottostante - un'immagine costituita da un unico colore.
Riprendendo il precedente esempio, sarà sufficiente impostare la seguente modifica, ad esempio per ottenere un effetto bianco con la cancellazione:

im2 = Image.Load("/percorso/del/secondo/file/immagine")     ' L'immagine principale che copre quella di fondo
im1 = New Image(im2.W, im2.H, Color.White, Image.Standard)  ' L'immagine di fondo che darà il colore unico come effetto "cancellazione"