moet (Normal User)
Pro
Messaggi: 185
Iscritto: 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 |
|
P4p3r0g4 (Member)
Guru
Messaggi: 1319
Iscritto: 29/12/2006
|
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..
|
|
moet (Normal User)
Pro
Messaggi: 185
Iscritto: 13/11/2007
|
Grazie per la risposta.
Sai darmi una dritta per cambiare la posizione dei pixel ? mi accontento di girarla a 90 !
Grazie ancora
|
|
P4p3r0g4 (Member)
Guru
Messaggi: 1319
Iscritto: 29/12/2006
|
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
|
|
moet (Normal User)
Pro
Messaggi: 185
Iscritto: 13/11/2007
|
mmm mi ritrovo un po in difficolta' !!!
Quando hai tempo e se hai voglia mi scriveresti un pezzo di codice ?!?!? grazie
|
|
gius (Ex-Member)
Expert
Messaggi: 294
Iscritto: 20/06/2007
|
Prova questo
Codice sorgente - presumibilmente VB.NET |
In un modulo .bas Declare Function SetPixel Lib _ "gdi32" Alias "SetPixelV" _ (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _ ByVal crColor As Long) As Long Declare Function GetPixel Lib _ "gdi32" (ByVal hdc As Long, _ ByVal x As Long, ByVal y As Long) As Long Public Sub rotateimage() Dim x As Long Dim y As Long Picture2.Height = Picture1.Width Picture2.Width = Picture1.Height For x = 0 To Picture1.Width For y = 0 To Picture1.Height Call SetPixel(Picture2.hdc, _ y, x, GetPixel(Picture1.hdc, x, y)) Next If x Mod 50 = 0 Then DoEvents Picture2.Refresh End If Next DoEvents Picture2.Refresh End Sub in un command per far girare l'immagine 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
Ultima modifica effettuata da gius il 15/11/2007 alle 17:58 |
|
moet (Normal User)
Pro
Messaggi: 185
Iscritto: 13/11/2007
|
heheh grazie domani la provo! se poi riesci a postarmi il codice per una sola img ancor meglio!
|
|
gius (Ex-Member)
Expert
Messaggi: 294
Iscritto: 20/06/2007
|
Eccoti accontentato
Codice sorgente - presumibilmente VB.NET |
In un modulo .bas Declare Function SetPixel Lib _ "gdi32" Alias "SetPixelV" _ (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, _ ByVal crColor As Long) As Long Declare Function GetPixel Lib _ "gdi32" (ByVal hdc As Long, _ ByVal x As Long, ByVal y As Long) As Long Public Sub rotateimage() Dim x As Integer Dim x As Long Dim y As Long Picture2.Height = Picture1.Width Picture2.Width = Picture1.Height For x = 0 To Picture1.Width For y = 0 To Picture1.Height Call SetPixel(Picture2.hdc, _ y, x, GetPixel(Picture1.hdc, x, y)) Next If x Mod 50 = 0 Then DoEvents Picture2.Refresh End If Next DoEvents Picture2.Refresh Picture1.Clear Picture1.Visible = False End Sub in un command per far girare l'immagine Call rotateimage
|
Ultima modifica effettuata da gius il 16/11/2007 alle 15:53 |
|
moet (Normal User)
Pro
Messaggi: 185
Iscritto: 13/11/2007
|
GRANDE ! E GRAZIE PROVO SUBITO !!!!!!!!!!
|
|