Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - ruotare un immagine
Forum - Visual Basic 6 - ruotare un immagine

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
moet (Normal User)
Pro


Messaggi: 185
Iscritto: 13/11/2007

Segnala al moderatore
Postato alle 19:56
Martedì, 13/11/2007
Ciao a tutti e complimenti a Piero Tofy !

Ho creato un programma che permette di spostare un immagine sul form e salva la posizione in un database per permettere al riavvio di trovarla nell' ultima posizione scelta dall' utente. ( trascinamento con pulsante mouse sx alias button 1 )

Avrei bisogno di riuscire a farla ruotare di 45° ad ogni click del mouse dx ( button 2 ).

Ringrazio chiunque potrebbe aiutarmi!



Ultima modifica effettuata da gius il 22/11/2007 alle 21:20
PM Quote
Avatar
P4p3r0g4 (Member)
Guru


Messaggi: 1319
Iscritto: 29/12/2006

Segnala al moderatore
Postato alle 14:34
Mercoledì, 14/11/2007
il problema di girare un'immagine a 45 gradi è che lasci degli spazi "vuoti". lasciami spiegare.
diciamo che l'immagine è 3x3
dividendo in pixel

1 2 3
4 5 6
7 8 9


se vogliamo girarla di 90 gradi è abbastanza semplice
basta che cambiamo la posizione dei pixel così

3 6 9
2 5 8
1 4 7


e avremo la nostra immagine a 90°

se invece volessimo girarla a 45° l'unico modo sarebbe di utilizzare le diagonali.
quindi

___ 3
_ 2 ? 6
1 ? 5 ? 9
_ 4 ? 8
___ 7

come puoi vedere nell'allinearli a una griglia orizzontale abbiamo dei "buchi".
l'unico modi è riempirli con una media dei 4 colori adiacenti però perdi di risoluzione..

PM Quote
Avatar
moet (Normal User)
Pro


Messaggi: 185
Iscritto: 13/11/2007

Segnala al moderatore
Postato alle 14:52
Mercoledì, 14/11/2007
Grazie per la risposta.

Sai darmi una dritta per cambiare la posizione dei pixel ? mi accontento di girarla a 90 ! :)

Grazie ancora

PM Quote
Avatar
P4p3r0g4 (Member)
Guru


Messaggi: 1319
Iscritto: 29/12/2006

Segnala al moderatore
Postato alle 15:45
Mercoledì, 14/11/2007
si potrebbe anche da picturebox ma io sinceramente preferisco le api
getpixel e setpixel
devi fare un bel ciclo e prendere tutti i pixel dell'immagine poi fai un picture.clear e scambi x e y

PM Quote
Avatar
moet (Normal User)
Pro


Messaggi: 185
Iscritto: 13/11/2007

Segnala al moderatore
Postato alle 20:37
Mercoledì, 14/11/2007
mmm mi ritrovo un po in difficolta' !!!


Quando hai tempo e se hai voglia mi scriveresti un pezzo di codice ?!?!? grazie

PM Quote
Avatar
gius (Ex-Member)
Expert


Messaggi: 294
Iscritto: 20/06/2007

Segnala al moderatore
Postato alle 17:57
Giovedì, 15/11/2007
Prova questo
Codice sorgente - presumibilmente VB.NET

  1. In un modulo .bas
  2.  
  3. Declare Function SetPixel Lib _
  4. "gdi32" Alias "SetPixelV" _
  5. (ByVal hdc As Long, ByVal x As
  6. Long, ByVal y As Long, _
  7. ByVal crColor As Long) As Long
  8. Declare Function GetPixel Lib _
  9. "gdi32" (ByVal hdc As Long, _
  10. ByVal x As Long, ByVal y As Long) As Long
  11.  
  12.  
  13.  
  14.  
  15.  
  16. Public Sub rotateimage()
  17. Dim x As Long
  18. Dim y As Long
  19. Picture2.Height = Picture1.Width
  20. Picture2.Width = Picture1.Height
  21. For x = 0 To Picture1.Width
  22. For y = 0 To Picture1.Height
  23. Call SetPixel(Picture2.hdc, _
  24. y, x, GetPixel(Picture1.hdc, x, y))
  25. Next
  26. If x Mod 50 = 0 Then
  27. DoEvents
  28. Picture2.Refresh
  29. End If
  30. Next
  31. DoEvents
  32. Picture2.Refresh
  33. End Sub
  34.  
  35.  
  36.  in un command per far girare l'immagine
  37.  
  38.  
  39. Call rotateimage



Per far funzionare il codice ci deve essere una Picture1 con l'immagine originale e creare na Picture2 per l'immagine modificata

P.S. Non sò quanto si gira limmagine perchè non ho vb

P.P.S.In seguito si può fare tutto in un'unica picture ma ora non ho tempo devo uscire:D:D:D

Ultima modifica effettuata da gius il 15/11/2007 alle 17:58
PM Quote
Avatar
moet (Normal User)
Pro


Messaggi: 185
Iscritto: 13/11/2007

Segnala al moderatore
Postato alle 0:43
Venerdì, 16/11/2007
heheh grazie domani la provo! se poi riesci a postarmi il codice per una sola img ancor meglio!

PM Quote
Avatar
gius (Ex-Member)
Expert


Messaggi: 294
Iscritto: 20/06/2007

Segnala al moderatore
Postato alle 7:14
Venerdì, 16/11/2007
Eccoti accontentato:k::k::k:
Codice sorgente - presumibilmente VB.NET

  1. In un modulo .bas
  2.  
  3. Declare Function SetPixel Lib _
  4. "gdi32" Alias "SetPixelV" _
  5. (ByVal hdc As Long, ByVal x As
  6. Long, ByVal y As Long, _
  7. ByVal crColor As Long) As Long
  8. Declare Function GetPixel Lib _
  9. "gdi32" (ByVal hdc As Long, _
  10. ByVal x As Long, ByVal y As Long) As Long
  11.  
  12.  
  13.  
  14.  
  15.  
  16. Public Sub rotateimage()
  17. Dim x As Integer
  18. Dim x As Long
  19. Dim y As Long
  20. Picture2.Height = Picture1.Width
  21. Picture2.Width = Picture1.Height
  22. For x = 0 To Picture1.Width
  23. For y = 0 To Picture1.Height
  24. Call SetPixel(Picture2.hdc, _
  25. y, x, GetPixel(Picture1.hdc, x, y))
  26. Next
  27. If x Mod 50 = 0 Then
  28. DoEvents
  29. Picture2.Refresh
  30. End If
  31. Next
  32. DoEvents
  33. Picture2.Refresh
  34. Picture1.Clear
  35. Picture1.Visible = False
  36. End Sub
  37.  
  38.  
  39. in un command per far girare l'immagine
  40.  
  41.  
  42. Call rotateimage



Guardando il codice non si può fare in una picture

ma...
Con un semplice .visible = false non si vede niente della prima
:k::k::k:

P.S.La gira di 90 gradi:rotfl::rotfl:

Ultima modifica effettuata da gius il 16/11/2007 alle 15:53
PM Quote
Avatar
moet (Normal User)
Pro


Messaggi: 185
Iscritto: 13/11/2007

Segnala al moderatore
Postato alle 20:58
Venerdì, 16/11/2007
GRANDE ! E GRAZIE PROVO SUBITO !!!!!!!!!!

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo