[wx] Bild schnell hintereinander laden und im Fenster anzeigen - wie am besten?



  • Hallo,

    es wird in regelmäßigen Abständen ein Screenshot vom Desktop gemacht, und dessen Bild auf 980x686 Bildpunkte runtertransformiert. Wenn ich dieses Bild in regelmäßigen Abständen mit einem Zeitintervall von z.B. 5 Sekunden in einem wxMediaCtrl anzeigen lasse, hat das MediaCtrl noch genügend Zeit, um es reinzuladen und anzuzeigen. Wenn der Intervall jedoch 3 oder weniger Sekunden entspricht, flackert die Anzeige nurnoch. Meine Frage ist, wie ich das Problem lösen soll, dass in dem Fenster das Bild auch jede Sekunde ohne Probleme aktualisiert werden kann. Mit einem wxStaticBitmap klappt es nicht, da mein GUI-Designer größere Bildformate als XPM Datei nicht kompilieren möchte (ist wohl nen Bug). Danke!


  • Mod

    Dann implementier das doch ohne GUI Designer, mach einfach eine von wxPanel abgeleitete Klasse, die das Bild dann darstellt.
    wxStaticBitmap würde da schon alles mitbringen, was du brauchst. Und mit wxImage kannst du auch andere Formate als XPM laden.



  • Dann implementier das doch ohne GUI Designer, mach einfach eine von wxPanel abgeleitete Klasse, die das Bild dann darstellt.

    Wozu soll ich von wxPanel ableiten?

    wxStaticBitmap würde da schon alles mitbringen, was du brauchst. Und mit wxImage kannst du auch andere Formate als XPM laden.

    Naja, wie ich gerade gelesen habe, ist wxStaticBitmap explizit nur für Bilder in Größe von Icons geeignet:

    wxWidgets Doku schrieb:

    It is meant for display of the small icons in the dialog boxes and is not meant to be a general purpose image display control. In particular, under Windows 9x the size of bitmap is limited to 64*64 pixels and thus you should use your own control if you want to display larger images portably.

    Die meinen, ich soll mir einen eigenen Control bauen, wenn ich größere Bitmaps anzeigen lassen will. Aber was meinen die damit genau? Wie mache ich das?


  • Mod

    mikey schrieb:

    Dann implementier das doch ohne GUI Designer, mach einfach eine von wxPanel abgeleitete Klasse, die das Bild dann darstellt.

    Wozu soll ich von wxPanel ableiten?

    So mache ich es, wenn ich ein eigenes Control erstelle. Siehe mein 2. wxWidgets Tutorial im Magazin.

    mikey schrieb:

    wxStaticBitmap würde da schon alles mitbringen, was du brauchst. Und mit wxImage kannst du auch andere Formate als XPM laden.

    Naja, wie ich gerade gelesen habe, ist wxStaticBitmap explizit nur für Bilder in Größe von Icons geeignet:

    wxWidgets Doku schrieb:

    It is meant for display of the small icons in the dialog boxes and is not meant to be a general purpose image display control. In particular, under Windows 9x the size of bitmap is limited to 64*64 pixels and thus you should use your own control if you want to display larger images portably.

    Die meinen, ich soll mir einen eigenen Control bauen, wenn ich größere Bitmaps anzeigen lassen will. Aber was meinen die damit genau? Wie mache ich das?

    1. ist das nur auf bestimmten Plattformen gültig (imho Win9x)
    2. Hab ich und andere schon problemlos große Bilder mit wxStaticBitmap dargestellt.

    Wenn du ein eigenes Control dafür implementieren willst, müsstest du von wxPanel oder wxScrolledWindow ableiten,
    je nach dem ob du ein scrollbares Bild willst oder nicht. Dann müsstest du ein eigenes OnPaint implementieren, das das Bild/Bitmap zeichnet.
    Hierbei würde sich ein BackBufferedDC empfehlen, um "Flickering" vorzubeugen.

    phlox



  • Danke für den Hinweis mit deinem Tutorial, habe ich damals wohl überlesen. 🙂 Das mit dem wxStaticBitmap klappt tatsächlich bei solchen Bildgrößen, es wird jetzt ohne Probleme angezeigt, und flackern tut auch nichts. 🙂 Danke.


Anmelden zum Antworten