Results 1 to 2 of 2

Thread: SDL - setting opacity

  1. #1

    SDL - setting opacity

    I have a BMP file which is supposed to be a player sprite.
    The thing is that, since BMP doesn't support transparency, I have to go another way to achieve it.

    I've read a tutorial on SetColorKey and SetAlpha, but I just don't get it - how do I define the color which should be left out? :?

    I'd appreciate an explanation, or better yet - a piece of code with that in it.

  2. #2

    Re: SDL - setting opacity

    Quote Originally Posted by Ixy
    I have a BMP file which is supposed to be a player sprite.
    The thing is that, since BMP doesn't support transparency, I have to go another way to achieve it.

    I've read a tutorial on SetColorKey and SetAlpha, but I just don't get it - how do I define the color which should be left out? :?

    I'd appreciate an explanation, or better yet - a piece of code with that in it.
    Here is some code that may help - I use it in my SDL sprite unit:

    Code:
    Procedure TSDLSprite.SetAlpha(Const AValue : Byte);
    Begin
        If Not Assigned(FSurface) Then Exit;
        Falpha := AValue;
        If Falpha <> 255 Then
            SDL_SetAlpha&#40;FSurface,SDL_SRCALPHA,Falpha&#41;
        Else
            SDL_SetAlpha&#40;FSurface,0,255&#41;;
    End;
    &#123;..............................................................................&#125;
    
    &#123;..............................................................................&#125;
    Procedure TSDLSprite.SetTransparent&#40;Const AValue &#58; Boolean&#41;;
    Begin
        If Not Assigned&#40;FSurface&#41; Then Exit;
        FTransparent &#58;= AValue;
        If FTransparent Then
            SDL_SetColorKey&#40;FSurface,SDL_SRCCOLORKEY,SDL_MapRGB&#40;FSurface^.format,Fr,Fg,Fb&#41;&#41;
        Else
            SDL_SetColorKey&#40;FSurface,0,0&#41;;
    End;
    &#123;..............................................................................&#125;
    
    &#123;..............................................................................&#125;
    Procedure TSDLSprite.SetTransparentColour&#40;Const r,g,b &#58; Byte&#41;;
    Begin
        Fr &#58;= r;
        Fg &#58;= g;
        Fb &#58;= b;
    End;
    &#123;..............................................................................&#125;
    
    &#123;..............................................................................&#125;
    FSurface is an internal PSDL_Surface stored in each sprite containing the picture data.

    Fr, Fg, Fb are the R, G, and B (0..255) byte values respectively of the transparent colour to be used for the colour-keying (transparency)

    Falpha is the byte value of how much the sprite is opaque (0 - not there, 255 is totally opaque)

    I hope this helps :-)
    cheers,
    Paul

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •