Differenze tra le versioni di "Ottenere l'effetto della gomma per cancellare in una DrawingArea"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 2: Riga 2:
  
 
Mostriamo un possibile codice pratico:
 
Mostriamo un possibile codice pratico:
Private punti As New Short[]
 
 
  Private im1 As Image
 
  Private im1 As Image
 
  Private im2 As Image
 
  Private im2 As Image
 +
Private punti As New Short[]
 
   
 
   
 
   
 
   
Riga 21: Riga 21:
 
   
 
   
 
  Public Sub DrawingArea1_Draw()   
 
  Public Sub DrawingArea1_Draw()   
+
    
   Dim i As Integer
 
 
 
   With Paint
 
   With Paint
 
     .DrawImage(im1, 0, 0, im1.W, im1.H, 1.0, Null)
 
     .DrawImage(im1, 0, 0, im1.W, im1.H, 1.0, Null)
 
     .DrawImage(im2, 0, 0, im2.W, im2.H, 0.9, Null)
 
     .DrawImage(im2, 0, 0, im2.W, im2.H, 0.9, Null)
     For i = 0 To punti.Max Step 2
+
     For i As Integer = 0 To punti.Max Step 2
 
       .Brush = .Image(im1)
 
       .Brush = .Image(im1)
 
       .Arc(punti[i], punti[i + 1], 16, Rad(0), Rad(360), False)
 
       .Arc(punti[i], punti[i + 1], 16, Rad(0), Rad(360), False)

Versione attuale delle 18:54, 17 lug 2024

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 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