Oppure

Loading
10/09/09 19:14
Hast
Eccomi qua con un'altro problema XD Stavolta sulla GDI+.
Innanzi tutto vorrei ringraziarmi per il supporto che mi avete dato prima, grazie mille :).

Passiamo al problema. La mia intenzione sarebbe quella di far ruotare su sè stessa un'immagine quando il mouse entra in un panel.
Ecco il mio codice
        
//in pnlProva_MouseEnter c'è il codice timer1.Start();
//g è un Graphic e imgprova è una Image
private void timer1_Tick(object sender, EventArgs e)
        {
            float prova = 1;
            g.DrawImage(imgprova, pnlProva.ClientRectangle);
             g.RotateTransform(prova);
            Invalidate();         
        }

Ora ci sono diversi problemi.. Innanzi tutto quando parte il timer avviene la rotazione su cordinate 0,0. Ho provato a usare g.TranslateTransform, ma quando inserisco come centro di rotazione il centro dell'immagine non ruota niente...
Poi con il metodo Invalidate mi rimane anche l'immagine prima della rotazione, come posso eliminarla?.
Il mio scopo sarebbe che una volta entrato il mouse nel panel l'immagine ruotasse su sè stessa all'infinito
aaa
11/09/09 7:54
Thejuster
Ovvio che non ti deve ruotare!

         
//in pnlProva_MouseEnter c'è il codice timer1.Start(); 
//g è un Graphic e imgprova è una Image 
private void timer1_Tick(object sender, EventArgs e) 
        { 
            float prova = 1; 
            g.DrawImage(imgprova, pnlProva.ClientRectangle); 
             g.RotateTransform(prova); 
            Invalidate();         
        } 


#Errore 1 float prova = 1;
#Errore 2 g.RotateTransform(prova);

che fai? assegni al ciclo sempre un float da 1. senza incrementarlo e ovviamente senza avere nessuna rotazione

devi incrementare la var prova e non dichiararla nel ciclo ma globale
cosi.



float prova = 1.0f;
private void timer1_Tick(object sender, EventArgs e) 
        { 
            g.DrawImage(imgprova, pnlProva.ClientRectangle); 
            g.RotateTransform(prova); 
            Invalidate();
            prova = prova + 0.1f; //velocità di rotazione       
        }


prova in questo modo.
mire.forumfree.it/ - Mire Engine
C# UI Designer
11/09/09 11:34
Hast
Funziona anche con il float che rimane a 1 perchè essendo in timer non c'è bisogno di incrementare la variabile poichè la rotazione dell'immagine aumenta. (esempio all'inizione timer la rotazione è 0 poi aumenta ogni volta che gira il timer, se provi il mio codice funziona).

Il problema è che io voglio impostare il centro di rotazione con il centro dell'imagine in modo che essa giri intorno al suo centro e in più vorrei che l'immagine precedente venisse cancellata dal Graphics, cosa che con Invalidate() non avviene.
aaa
11/09/09 17:32
Hast
Porto nuovi aggiornamenti.
Allora dopo lunghe ed estenuanti googlate ho usato questo sistema da mettere nel timer:

private void timer1_Tick(object sender, EventArgs e)
{
pictureBox1.Image.RotateFlip(RotateFlipType.Rotate90FlipXY);
pictureBox1.Refresh();
}


Ora funziona esattamente come voglio io, se non fosse per il fatto che io vorrei che ruotasse un po' più piano. Così mi viene mal di testa XD

Edit: So che non è possibile modificare il metodo RotateFlipType. Vorrei sapere come fare una cosa simile.
Ultima modifica effettuata da Hast 11/09/09 18:13
aaa
12/09/09 7:58
Il Totem
Ruota di 90 gradi alla volta...
aaa
12/09/09 8:35
r0gerblack
Totem ha ragione, ti conviene mettere a 2
aaa
12/09/09 8:54
Hast
Postato originariamente da Il Totem:

Ruota di 90 gradi alla volta...


Ruota già di 90 alla volta, io voglio fare qualcosa di simile al RotateFlip poichè quello non lo posso modificare. Il rotateflip mi serviva come esempio per far capire ciò che volevo fare.

Totem ha ragione, ti conviene mettere a 2

Sorry non ho capito... Cosa devo mettere a 2?
aaa
12/09/09 8:59
r0gerblack
mettere a 2 gradi la rotazione
aaa