Allegro: draw_sprite() funktioniert nicht richtig



  • ich habe da ein Darstellungsproblem mit Allegro, vieleicht weiss da jemand was ich falsch mache 🙄 ...

    Das Hintergrundbild wird bei mir korrekt dargestellt, nur das Sprite total falsch andere Farben und da wo RGB(255,0,255) sein sollte ist alles weis gelb gestreift, anstatt transparent...

    MSVC 6 /MFC:

    set_gdi_color_format();
    set_color_depth(desktop_color_depth());
    set_color_conversion(COLORCONV_NONE);

    BITMAP *bmTest = load_bitmap("test.tga",NULL);
    BITMAP *pointer = load_bitmap("pointer.bmp", NULL);
    BITMAP *doublebuffer = create_bitmap(bmTest->w, bmTest->h);

    CClientDC pDC(this);
    HDC hDC = pDC.GetSafeHdc();

    //Hintergrund in den Puffer zeichnen
    clear(doublebuffer);
    blit(bmTest, doublebuffer, 0, 0, 0, 0, bmTest->w, bmTest->h);

    //Sprite in den Puffer
    draw_sprite(doublebuffer, pointer, 0,0);

    //den Puffer anzeigen (ins Fenster)
    blit_to_hdc(doublebuffer, hDC, 0,0, 0, 0, bmTest->w, bmTest->h);

    Es scheint an der draw_sprite Funktion zu liegen, den alles andere funktioniert ...

    Weiß vieleicht jemand was ich 😕 da falsch mache (laut allegro-hilfe müsste es ja so gehen )?



  • Hast Du vielleicht zufällig nur 256 Farben eingestellt?
    Könnte ein Palettenproblem sein!



  • nö , hab 16 bit oder 32 bit auf 'm Desktop. Beides macht den Fehler nur die Streifen sehn dann etwas anders aus.
    Da ich im Fenstermodus bin müssten die Werte ja von allegro übernommen werden.
    Wenn ich das zweite Bitmap mit blit(... in den Puffer schreibe ist ja auch alles normal. Nur eben keine Transparenz in den RGB(255,0,255)-Bereich !
    Mh versteh ich nicht 😞



  • Könnte es denn sein, dass eine der BMP-Dateien im 8-Bit-Format gespeichert ist?



  • nein leider nicht hat ich auch gedacht, beide 24 BitsPerPixel.
    vieleicht muß ich beim draw_sprite() Aufruf noch irgendwas beachten ?

    Wenn ich masked_blit(.. aufrufe sieht das Ergebniss genauso seltsam aus wie bei draw_sprite() ... 😞

    ...
    BITMAP *bmTest = load_bitmap("test.bmp",NULL);
    BITMAP *pointer = load_bitmap("pointer.bmp", NULL);
    BITMAP *doublebuffer = create_bitmap(bmTest->w, bmTest->h);

    CClientDC pDC(this);
    HDC hDC = pDC.GetSafeHdc();

    set_palette_to_hdc( hDC, default_palette );

    //Hintergrund in den Puffer zeichnen
    clear(doublebuffer);
    blit(bmTest, doublebuffer, 0, 0, 0, 0, bmTest->w, bmTest->h);

    //Sprite in den Puffer
    //draw_sprite(doublebuffer, pointer, 0,0);
    masked_blit(pointer, doublebuffer, 0,0,0, 0,pointer->w, pointer->h );

    //den Puffer anzeigen (ins Fenster)
    blit_to_hdc(doublebuffer, hDC, 0,0, 0, 0, bmTest->w, bmTest->h);



  • Am besten fragst Du wohl mal in den Foren unter www.allegro.cc nach, die kennen sich besser aus als wir hier...



  • hast recht, werd ich wohl machen.

    Ansonsten muss ich wohl doch meine eigne 2D En. schreiben ... 🙂



  • Hura ich habs !!! 🙂

    hab da in dem Forum was von COLORCONV_TOTAL
    gelesen - und es klappt, warum die keinen Hinweis darauf in der Allegro-Hilfe haben versteh ich aber nicht , naja.

    //set_color_conversion(COLORCONV_NONE);
    set_color_conversion(COLORCONV_TOTAL);

    Ciao und Danke bis zum nächsten Problem, Maty !



  • Naja MFC und Allegro ist auch ne eher ungewöhnliche Kombo 😉
    Machst dir damit IMHO das Leben eher unnötig schwer



  • Na da hast Du schon recht - aber in meinem Fall mach ich mir damit eher das leben etwas leichter 😉 (es kommt bei meinen Anwendungen nicht so auf Geschwindigkeit an) Wenn man die MFC erstmal gut kennt weiß man sie zu schätzen, man kann ja auch mit MFC immer noch auf die WinAPI oder DirectX zugreifen.


Log in to reply