Schnelle Bildanzeige



  • Hallo,

    ich habe folgendes Problem. In einer BV Software muss ich einzelne Bildbereich in
    sehr schneller Abfolge darstellen. Bisher habe ich direkt mit SetPixel gearbeitet,
    was ich aber nicht für sinnvoll halte. Meine Idee war nun über CBitmap oder DIP
    mein Anzeige umzusetzen. Hat in diesem Bereich jemand Erfahrung, was die
    schnellste Methode ist um mein BYTE Array anzuzeigen?

    Besten Dank!

    Gruß charlie



  • wenns schnell gehen soll, dann schau doch mal bei OpenGL vorbei.
    Ansonsten um mehr zu sagen, müsstes du schon konkreter beschreiben, was du genau machen willst.



  • Ich rate einfach mal ins blaue.
    Du magst ein Teil Deiner Fensterfläche mit einem Bitmap belegen?

    Im Zweifelsfall tut man das im Paint-Ereignis.
    Ich hab hie rnur die API-Funktionen, also nix MFS, aber Du solltest umsetzen können.

    HDC hDcT = CreateCompatibleDC(hdc) ;
    hOldBmp = SelectObject(hDcT, pCtrli->hBmp) ;
    BitBlt(hdc, XDest, yDest, Width, Height, hDcT, xSrc, ySrc, SRCCOPY) ;
    SelectObject(hDcT, hOldBmp) ;
    DeleteDC(hDcT) ;

    Also xSrc und ySrc müssen wahrscheinlich bei Dir auch 0 sein.
    Der Rest sollte selbsterklärend sein.

    Gruß André
    Notiz an mich selbst: Probier doch mal den Code zu formatieren.



  • Ich hab das gleiche Problem gehabt und das auch über CBitmaps gelöst. Im Konstruktor der Doc-Klasse werden zwei Speichergerätekontexte angelegt. Einer wird zum Zeichnen verwendet, der andere zum Anzeigen. Die OnDraw beschränkt sich dann darauf nur durch eine BitBlt-Methode das entsprechende Bitmap grafisch darzustellen. Das ganze fordert nur eine ziemlich strenge Synchronisierung da immer sichergetsellt werden muss, dass die Daten im entsprechenden Speicherkontext gültig sind.



  • Zeichnen in der Doc-Klasse???



  • Pellaeon schrieb:

    Zeichnen in der Doc-Klasse???

    Nein, natürlich nicht zeichnen in der Doc-Klasse. Das was ich da beschrieben habe ist ja nichts anderes als Off-Screen-Technik. In der Doc-Klasse werden die entsprechenden Bildpunkte berechnet und im Speicherkontext abgelegt. Die OnDraw übernimmt dann das eigentliche Zeichnen, in dem sie sich darum kümmert das der Inhalt des Speicherkontextes auf den Bildschirm kommt. Vorteil dieser Sache ist: man kann ein komplettes Bild im Speicher erzeugen und es dann mit einem Schlag blitten. Somit sind schneller Bildschirmaufbauten möglich und das Flackern wird möglicherweise reduziert. Bestes Beispiel sind die Berechnung und Darstellung von Fraktalen (Julia-Menge oder Apfelmännchen).



  • Besten Dank für die Hilfe. Werde es jetzt mit CBitmap umsetzen und mal testen.
    Werde euch dann meine Erfahrungen berichten.

    Gruß charlie


Anmelden zum Antworten