13/11/07 18:56
moet
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 22/11/07 20:20
aaa
14/11/07 13:34
P4p3r0g4
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..
aaa
14/11/07 14:45
P4p3r0g4
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
aaa
14/11/07 19:37
moet
mmm mi ritrovo un po in difficolta' !!!
Quando hai tempo e se hai voglia mi scriveresti un pezzo di codice ?!?!? grazie
aaa
15/11/07 16:57
gius
Prova questo
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 15/11/07 16:58
aaa
15/11/07 23:43
moet
heheh grazie domani la provo! se poi riesci a postarmi il codice per una sola img ancor meglio!
aaa
16/11/07 6:14
gius
Eccoti accontentato
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
Guardando il codice non si può fare in una picture
ma...
Con un semplice .visible = false non si vede niente della prima
P.S.La gira di 90 gradi
Ultima modifica effettuata da gius 16/11/07 14:53
aaa