Bitmap global anlegen
-
Folgendes Probelm:
Im moment habe ich eine Zeichenfunktion, die mir jedesmal ein Bitmap erstellt und anhand eines Arrays zeichnet und danach das Bitmap wieder wegräumt. Das ist leider recht ineffektiv (wenn man ein bil von 900x650 hat). Nun such ich einen Weg um das einfach zu machen. D.h. ich will das Bitmap global anlegen und dann immer nur die neuen Daten reinzeichnen und die alten daten einfach weiterschieben.
Wie muss ich das Bitmap anlegen, damit ich das global habe?
Im moment mach ich das so:
void CProgrammDlg::DrawFunction(void) { CDC cDC; CBitmap cBitmap; CDC* pDC = this->GetDC(); CBrush myBrush; //Create a bitmap and set the options cDC.CreateCompatibleDC(pDC); cBitmap.CreateCompatibleBitmap(pDC, 1000, 650); //Set Color für brush myBrush.CreateSolidBrush(RGB(255, 255, 255)); //Select the bitmap and write into it CBitmap* pOldBitmap = cDC.SelectObject(&cBitmap); CBrush* pOldBrush = cDC.SelectObject(&myBrush); //Set font cDC.SetTextColor(RGB(0,0,0)); //Create backgroundcolor for bitmap cDC.FillRect(CRect(0, 0, 1000, 650), &myBrush); //************************************************************************** //Draw begin //Draw end //************************************************************************** /*Draw cBitmap on Screen*/ pDC->BitBlt(5, 5, 1000, 650, &cDC, 0, 0, SRCCOPY); cDC.SelectObject(&pOldBitmap); cDC.SelectObject(&pOldBrush); DeleteDC(cDC); ReleaseDC(pDC); }
-
Hallo,
du könntest die Bitmap und eventuell noch anderes auch als Klassen-Member von CProgrammDlg anlegen, die Bitmap "lebt" dann so lang wie der Dialog. Globales vermeidet man doch eher...
MfG,
Probe-Nutzer
-
hmmm hab ich schon hinbekommen.
hab sie jeweils als "protected" drin (also CDC, CBitmap und CDC*);
Mein eigentliches probelm ist aber anscheinend ein anderes.
Ich muss das Bitmap-Zeichnen so Effektiv wie mögliche machen. Bisher hab ich immer alle Daten meines Arrays auf einen Schlag (bzw. nacheinander) geschrieben.
Effektiver ist aber immer nur den neusten Wert reinzuschreiben. Also so:Neuer Wert -> Vorherigen wert um ein Pixel schieben -> Neuer Wert schreiben.
Nur fehlt mir dazu gerade die richtige vorgehensweise, bzw. wie ich das realisieren kann. Mir fehlen die richtigen Funktionen und die Lust (blöde hitze)
-
Suche im Forum oder google nach "MemDC"
-
Und wie soll mir MemDC helfen? Bei mir falckert nichts und ich zeichne erst auf ein CDC und zeichne das später mit BitBlt(). JEdenfalls hab ich so MemDC verstanden.