[SDL] SDL Color-masking Blitting?

Jonathan Dearborn grimfang4 at hotmail.com
Mon Feb 4 16:02:45 PST 2008


Oops,

That surface creation part of the function in my last email should be generalized like so:

SDL_Surface* colorSwapSingle(SDL_Surface* surface, Uint32 oldColor, Uint32 newColor)
{
SDL_SetColorKey(surface, SDL_SRCCOLORKEY, oldColor);
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
       
SDL_Surface* result =
SDL_CreateRGBSurface(SDL_SWSURFACE,surface->w,surface->h,surface->format->BytesPerPixel, surface->format->Rmask, surface->format->Gmask, surface->format->Bmask, surface->format->Amask);
    #else
       
SDL_Surface* result =
SDL_CreateRGBSurface(SDL_SWSURFACE,surface->w,surface->h,surface->format->BytesPerPixel, surface->format->Rmask, surface->format->Gmask, surface->format->Bmask, surface->format->Amask);
    #endif
SDL_FillRect(result, NULL, newColor);
SDL_BlitSurface(surface, NULL, result, NULL);
return result;
}



Jonny D





From: grimfang4 at hotmail.com
To: sdl at lists.libsdl.org
Date: Mon, 4 Feb 2008 18:55:46 -0500
Subject: Re: [SDL] SDL Color-masking Blitting?







Hey Taylor,

There are at least two ways about this.  If you are restricting yourself to a single-color swap like black for dark magenta, you should use a colorkeyed surface:

SDL_Surface* colorSwapSingle(SDL_Surface* surface, Uint32 oldColor, Uint32 newColor)
{
SDL_SetColorKey(surface, SDL_SRCCOLORKEY, oldColor);
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
        SDL_Surface* result = SDL_CreateRGBSurface(SDL_SWSURFACE,surface->w,surface->h,32, 0xFF000000, 0x00FF0000, 0x0000FF00, 0x000000FF);
    #else
        SDL_Surface* result = SDL_CreateRGBSurface(SDL_SWSURFACE,surface->w,surface->h,32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000);
    #endif
SDL_FillRect(result, NULL, newColor);
SDL_BlitSurface(surface, NULL, result, NULL);
return result;
}


Otherwise, attached is some code for a very slow blitter that you can tweak to fit your needs.  I think I included all the code you need.  It's all in SPriG at http://pubpages.unh.edu/~jmb97 in case you're interested in that.  If there are any problems, just tell me.

Jonny D



From: terinfire at hotmail.com
To: sdl at lists.libsdl.org
Date: Mon, 4 Feb 2008 10:58:33 -0600
Subject: [SDL] SDL Color-masking Blitting?








I was curious if there was a built-in way to mask a surface and then blit it.  Basically, say I have a font or an image, and it is black and white -- nothing else.  I want to be able to mask the image (say with color 255,0,128, so I have a kind of dark red-magenta), and then blit it.  Is there a way that is built in?  If not, then am I basically just needing to write my own specialized Blit function to do this?  Or if anyone's already done this and is kind and doesn't mind divulging some open-source code, that'd be pretty cool too!

Need to know the score, the latest news, or you need your Hotmail®-get your "fix". Check it out.

Need to know the score, the latest news, or you need your Hotmail®-get your "fix". Check it out.

_________________________________________________________________
Helping your favorite cause is as easy as instant messaging. You IM, we give.
http://im.live.com/Messenger/IM/Home/?source=text_hotmail_join
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.libsdl.org/pipermail/sdl-libsdl.org/attachments/20080204/6eb33d71/attachment-0008.htm>


More information about the SDL mailing list