23. maj 2008 - 21:35Der er
6 kommentarer og 1 løsning
Bitmap på overfladen af en UserControl?
Hej,
jeg har gang i et projekt, hvor jeg skal have tegnet en grafen på overfladen af en controller. Det jeg har gjort indtil videre, er, at gentegne hele grafen i hvergang, der kommer en ny værdi i OnPaint. Det sløver processoren gevaldig, og derfor tænkte jeg på, at oprette et bitmap, hvorpå de nye værdier bliver tilføjes selve bitmappet. Så er der selvfølgelig nogle småting med at gentage, når den bliver minimeret osv., men den tager vi til den tid. Det vigtigeste er at få minimeret forbruget af CPU-kraft.
using (Pen Graphpen = new Pen(Color.Black)) { int sampleCount = _samples.Count;
Fordi dit Graphics object peger på BitMap billedet, og ikke på din UserControl. Så du bliver altså ved med at tegne på et billede som ligger i memory og aldrig bliver tegnet på skærmen.
Nedenstående kode giver ingen mening: Graphics g = e.Graphics; g = Graphics.FromImage(_bitGraph);
Først sætter du g = e.Graphics. Derefter fjerner du referencen og sætter g = Graphics.FromImage(_bitGraph). Dermed bliver den første linje overflødig!
Gaphics objektet er overfladen du tegner på. Hvis du får din Graphics ved at kalde FromImage, så er overfladen det billede du giver som parameter. Hvis du bruger det graphics objekt der bliver sendt med OnPaint metoden i PaintEventArgs objektet, er overfladen din Control.
Du kan godt tegne flere Bitmaps ovenpå hinanden:
Bitmap b1 = new Bitmap(..); Graphics gb1 = Graphics.FromImage(b1); ... //Tegn på b1 ved at bruge gb1 Graphics objecktet.
Bitmap b2 = new Bitmap(..); Graphics hb2 = Graphics.FromImage(b2); ... //Tegn på b2 ved at bruge gb2 Graphics objecktet.
//Til sidst tegner du det hele på din Control: e.Graphics.DrawImage(b1, new Point(0,0)); e.Graphics.DrawImage(b2, new Point(0,0));
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.