Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C#] GDI+
Forum - C# / VB.NET - [C#] GDI+

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Hast (Normal User)
Rookie


Messaggi: 52
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 21:14
Giovedì, 10/09/2009
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
Codice sorgente - presumibilmente C# / VB.NET

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


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

PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1888
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 9:54
Venerdì, 11/09/2009
Ovvio che non ti deve ruotare!

Codice sorgente - presumibilmente C# / VB.NET

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



#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.



Codice sorgente - presumibilmente C# / VB.NET

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



prova in questo modo.


PM Quote
Avatar
Hast (Normal User)
Rookie


Messaggi: 52
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 13:34
Venerdì, 11/09/2009
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.

PM Quote
Avatar
Hast (Normal User)
Rookie


Messaggi: 52
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 19:32
Venerdì, 11/09/2009
Porto nuovi aggiornamenti.
Allora dopo lunghe ed estenuanti googlate ho usato questo sistema da mettere nel timer:

Codice sorgente - presumibilmente C# / VB.NET

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



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 il 11/09/2009 alle 20:13
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 9:58
Sabato, 12/09/2009
Ruota di 90 gradi alla volta...


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
r0gerblack (Ex-Member)
Pro


Messaggi: 70
Iscritto: 04/08/2008

Segnala al moderatore
Postato alle 10:35
Sabato, 12/09/2009
Totem ha ragione, ti conviene mettere a 2

PM Quote
Avatar
Hast (Normal User)
Rookie


Messaggi: 52
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 10:54
Sabato, 12/09/2009
Testo quotato

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.

Testo quotato


Totem ha ragione, ti conviene mettere a 2


Sorry non ho capito... Cosa devo mettere a 2?

PM Quote
Avatar
r0gerblack (Ex-Member)
Pro


Messaggi: 70
Iscritto: 04/08/2008

Segnala al moderatore
Postato alle 10:59
Sabato, 12/09/2009
mettere a 2 gradi la rotazione

PM Quote
Avatar
Hast (Normal User)
Rookie


Messaggi: 52
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 11:47
Sabato, 12/09/2009
Testo quotato

Postato originariamente da r0gerblack:

mettere a 2 gradi la rotazione


Come faccio? Il RotateFlip c'è solo di 90 180 e 270 gradi

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo