Refresh di un graphics, grossi problemi

giovedì 07 dicembre 2006 - 16.55

Tommy79 Profilo | Newbie

Ciao a tutti,
ho creato in c# una mia applicazione che disegna dei punti su un piano (una picturebox), dato ke i punti sono tanti faccio il ciclo dentro un dataset per andarli a prendere tutti.

Mi sono creato un metodo che chiamiamo redraw(), all'interno del quale creo il mio oggetto "g" graphics, poi faccio tutti i miei disegni, g.drawellipse, ecc.... in base agli elementi nel dataset posso avere anche 7-8000 ellissi o puntini da disegnare.

Il problema è qua, se poi ci passo sopra con una finestra il disegno si cancella.

Per far si ke rimanga avevo fatto cosi, ho ilserito la chiamata a redraw() dentro l'evento paint della picturebox

Ma cosi scatta di brutto se sopra ci passo con un altra finestra.

Ho fatto delle prove ho visto che invece facendo picturebox.image e dandogli una immagine jpeg nn ce bisogno di mettere niente dentro l'evento paint, ridisegna la parte cancellata (al passaggio di un altra finestra) da solo.

Cosi sarebbe perfetto. Ma come posso fare io?

Io pensavo di convertire le figure geometriche dentro graphics in image, ma nn si può fare...
invece si può dare un immagine a graphics...

aiutatemi sono bloccato in questo problema mi sembra una cosa nota, ma nn ho trovato risposta, son giorni che cerco... :(

Fantazma Profilo | Junior Member

Ciao
in questi casi la via più semplice è quella di creare una bitmap da associare alla picturebox e poi da questa bitmap ricavare l'oggetto graphics che usi per disegnare. Non hai così alcun problema di refresh!!!

In caso di problemi fammi sapere...

Tommy79 Profilo | Newbie

ok...

è quello che pensavo anche io

ma come faccio a creare la bitmap dalle figure che ho dentro il mio graphics???

mi puoi spiegare come fare?

Fantazma Profilo | Junior Member

Ciao
non ho il visual studio sotto mano quindi vado un po' a braccio...

Con queste righe ti crei l'immagine su cui disegnare e da cui creare l'oggetto Graphics

Bitmap ImmagineSpool = new Bitmap(1280, 1024); Graphics g; private object g = Graphics.FromImage(ImmagineSpool);

Ora usando g disegni tutto ciò che vuoi e poi semplicemente attribuisci alla picturebox la bitmap ImmagineSpool
Questo codice lo puoi mettere all'interno di una routine che invochi ogni volta tu voglia aggiornare l'immagine. Ricordati di invocare il dispose degli oggetti grafici mi raccomando.

Spero di essere stato chiaro... fammi sapere se è tutto a posto.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5