Oppure

Loading
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 13:52
moet
Grazie per la risposta.

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

Grazie ancora
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:D:D:D
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:k::k::k:
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
:k::k::k:

P.S.La gira di 90 gradi:rotfl::rotfl:
Ultima modifica effettuata da gius 16/11/07 14:53
aaa