@digi_casi: Bilder im eWindow dynamisch einbinden ...

  • Hallo digi_casi,


    im Tuxbox CVS habe ich gesehen, dass du viel oder alles beim picviewer gecodet hast. Deswegen hätte eine Frage an dich (die du bei deinem Wissen über Bilder auf der Dreambox anzeigen vielleicht leicht beantworten kannst):


    Ich möchte ein Plugin basteln (bzw. habe das Plugin bis auf die Bildanzeige schon erstellt), welches zu einem Produkt ein Bild anzeigt.
    Dieses Bild liegt dann als jpg z.B. in /tmp/Bild1.jpg, /tmp/Bild2.jpg ...


    Man kann dann aus einer Liste von Produkten wählen und es soll immer das zugehörige Bild dargestellt werden.


    Lange Rede kurzer Sinn: Könntest du mir ein Codeschnipsel schicken, wie ich auf einem Dialog (eWindow) ein Bild plazieren kann? (nicht Vollbild, sondern sagen wir 200x150pix; da soll immer noch Text usw. nebenstehen).
    Das Bild muß/soll ev. vorher auf obige Größe resized werden.
    Ich hatte es schon mal geschafft Bilder über ein Skin einzubauen, aber das ist mir etwas zu statisch, oder gibts da keinen anderen Weg?


    Für einen Tipp wäre ich dir echt dankbar.


    Viele Grüße
    Ralf

  • Hab ich ja aschon mal gemacht. Das ist doch der Weg über ein Skin, oder sehe ich das falsch?


    Da wird doch im esml-Skinfile das File (mit Namen) statisch gesetzt:

    Code
    <images basepath="" target="fb">
    ...
      <img name="dreamlogo" src="dreamlogo-fs8.png" />
    ...
    </images>

    und dann für den entsprechenden Dialog (hier eAboutScreen) die entsprechende "Referenz" zum eLabel gesetzt:

    Code
    <object name="eAboutScreen">
      <eAboutScreen text="About..." cposition="125:105" csize="450:410">
    ...
        <eLabel name="dreamlogo" pixmap="dreamlogo" position="e-160:e-105" csize="143:75" alphatest="on" />
    ...
      </eAboutScreen>
    </object>

    Später im enigma_info.cpp wird das die Instance des Label(-Bilds) erzeugt:

    Code
    ...
    dreamlogo=new eLabel(this);
    dreamlogo->setName("dreamlogo");
    ...


    OK soweit. Aber wie könnte ich nun zur Laufzeit des Plugins das obige "dreamlogo-fs8.png" durch ein Bild "bla.jpg" (oder was auch immer) anderer Größe ersetzten?

  • ja, das ist ueber skins... da kannste die images auch alle im skin definieren... und dann
    mit
    logo[i]=new eLabel(this);
    logo[i]->setName("mypicx");
    alle logos setzen.
    und dann mit hide und show dasjenige anzeigen, das du willst. du kannst also in einem window 25 bilder definieren, 24 hiden und 1 showen.
    wenn ich mich recht entsinne, muesste das so gehen.


    es geht auch ohne skin. dann musst die klasse gpixmap verwenden. ../lib/gdi/gpixmap.
    in ../lib/gui/eskin sieht man dann, wie es verwendet wird.

  • Habe mal in diegPixmap usw. reingeschaut. Wenn ich das mit png's machen würde ist alles klar. (da gibt's loadPNG usw...)


    Leider habe ich jedoch jpg's.Hast du da vielleicht noch einen Tipp? Ist das ev. über ePictureDecoderJPEG zu lösen? Aber wie ist das anzuwenden..?


    Oder könnte man

    Code
    int fh_jpeg_load(const char *filename, unsigned char *buffer, int x, int y)

    aus der jpeg.cpp nutzen und den Buffer dann in eine gPixmap schieben?!? Etwa so:


    Code
    ...
    gPixmap MyPixmap;
    MyPixmap.data = buffer;
    MyPixmap.x = x;
    MyPixmap.y = y;
    ...


    Würde das funzen? :face_with_rolling_eyes:

    Einmal editiert, zuletzt von BadCarma ()

  • Ja, das ist schon klar. Das coden ansicht ist kein Problem, das werde ich schon machen, wenn ich nur wüßte, wie ich da prinzipiell bei jpg's vorgehen soll/muß ... :loudly_crying_face:

  • ka, muesste ich mich auch einarbeiten... beim pic-viewer wird immer der gesamte fb mit dem bild gefuellt... nicht nur ein ausschnitt. das ist einfacher als das, was du machen willst.

    Einmal editiert, zuletzt von digi_casi ()

  • na ja, ich werde mal mein Glück versuchen ... mal schauen, ob's klappt. :smiling_face_with_sunglasses:


    Vielleicht hast du ja trotzdem noch eine Idee (oder jemand anderes) wie man starten könnte ...

    Einmal editiert, zuletzt von BadCarma ()