DirectDraw und Transparenz: Problem mit Farbdefinition (ColorKey)



  • Hallo,

    ich hab nen Problem mit dem setzen des ColorKey für eine Surface.
    Gibts da etwas besonderes zu beachten (DX-flag)? bei mir ist nur

    RGB(0,0,0)
    RGB(255,255,255)
    

    transparent, der Rest funktionioniert nicht. Die Bilddaten sind 24Bit.
    ich setze immer folgendermaßen:

    ColorKey.dwColorSpaceLowValue = RGB(0,0,0);
    ColorKey.dwColorSpaceHighValue = RGB(0,0,0);
    m_pSurface->SetColorKey(DDCKEY_SRCBLT,&ColorKey);
    

    zeichnen funktioniert im vollbild mit:

    BltFast(nXPos,nYPos,pSurface,&rcSource,DDBLTFAST_SRCCOLORKEY|DDBLTFAST_WAIT)))
    

    irdendwelche ideen?

    danke!
    marcello



  • in welchen Format erwartet dwColorSpaceLowValue den Colorkey? wenn du dir darüber klar bist, dann ist wahrscheinlich auch dein Problem gelöst



  • Gehirnmann schrieb:

    irdendwelche ideen?

    Nein.

    Bye, TGGC (Keine Macht den Dummen)



  • Ich nehme an du willst mir sagen mein Farb-Format ist schrott?
    hmm. komisch, hab ich aber schon an einigen Stellen so gesehen....
    ich schau mal! danke!



  • Gehirnmann schrieb:

    hmm. komisch, hab ich aber schon an einigen Stellen so gesehen....

    Ich hab' auch schon Stellen gesehen, wo im GUI-Thread komplizierte Berechnungen wie Apfelmännchen und so angestellt wurden... Willst doch wohl nicht sagen das wär' Schrott?!? 😮



  • @Gehirnmann

    Hol dir das Farbformat mit

    GetDisplayMode(&ddsd);
    

    Danach speicherst du diese in

    MaskRed   = ddsd.ddpfPixelFormat.dwRBitMask;
    MaskGreen = ddsd.ddpfPixelFormat.dwGBitMask;
    MaskBlue  = ddsd.ddpfPixelFormat.dwBBitMask;
    

    Die Farbe berechnest du mit

    color=(((unsigned long)(MaskRed  * r )) &m_MaskRed)+
          (((unsigned long)(MaskGreen* g )) &m_MaskGreen)+
          (((unsigned long)(MaskBlue * b )) &m_MaskBlue);
    

    Beachte das die einzelnen Farbwerte in einem Bereich von 0 bis 1.0 liegen.



  • Sollte eiegentlich immer noch in der FAQ stehen.

    Bye, TGGC (Keine Macht den Dummen)


Anmelden zum Antworten