Witam .
Mam aplikację generującą punkty na płaszczyźnie i potem wyświetlającą te punkty na panelu. Problem tkwi w tym że tych punktów może być kilka tysięcy i wówczas każde odmalowanie panelu trwa kilka sekund :/ Punkty rysuję prymitywnie ;) w ten sposób:
grafika1.DrawEllipse(pen2, p.x, p.y, 1, 1);
gdzie:
grafika1 = panel1.CreateGraphics();
W jaki sposób "rysować do pamięci" a potem wyświetlić już gotową bitmapę ?, a może jest prostsze rozwiązanie?
Jestem zielony i proszę o kawałek kodu.
dokładnie tak jak piszesz - tworzysz jeden obrazek w pamięci, rysujesz na nim, a potem zawartość kopiujesz do drugiej bitmapy. poszukaj trochę w helpie i dojdziesz sam do wszystkiego.
no już siedzę nad tym parę godzin... projekt powinienem był już wysłać ;D
Przed sesją każda godzina cenna :]
doszedłem wiec do takiego kodu, który niestety nic nie wyświetla, panel1 jest biały ...
deklaruje:
Graphics grafika1,grafa;
Bitmap bitmapa;
...
inicjalizuje:
private void Generator_Load(object sender, EventArgs e)
{
bitmapa = new Bitmap(panel1.Width,panel1.Height);
grafa = Graphics.FromImage(bitmapa);
grafika1 = panel1.CreateGraphics();
...
}
próbuje rysować:
private void panel1_Paint(object sender, PaintEventArgs e)
{
...
grafa.DrawEllipse(pen3, elp.a.x, elp.a.y, elp.szer, elp.wys);
...
grafika1 = Graphics.FromImage(bitmapa);
}
po kliknieciu na jakiś button odrysowuje:
panel1.Invalidate();
//panel1.Refresh();
Niestety bez rezultatów ... Co robię źle ?
zaczęło działać, choć nadal widać lekkie mruganie.
w kodzie zmieniłem:
private void panel1_Paint(object sender, PaintEventArgs e)
{
...
grafa.DrawEllipse(pen3, elp.a.x, elp.a.y, elp.szer, elp.wys);
...
grafika1.DrawImage(bitmapa,0,0);
zamiast grafika1 = Graphics.FromImage(bitmapa);
}
Jak ktoś miałby podobny problem to polecam http://www.codeguru.pl/article-print-160.aspx