[SDL] Converting a surface to another color
Viktor Dick
dickviktor at gmx.net
Mon Jan 1 06:21:12 PST 2007
Thanks @ all who helped! The following code works now:
----------
SDL_Surface* create_surface(int size)
{
SDL_Surface* tmp = SDL_CreateRGBSurface(SDL_SWSURFACE, size, size, 32,
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
0xff000000, 0x00ff0000, 0x0000ff00, 0x000000ff);
#else
0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);
#endif
SDL_Surface* result = NULL;
if( tmp ) {
result = SDL_DisplayFormat( tmp );
SDL_FreeSurface( tmp );
};
if (!result) cerr << SDL_GetError();
return result;
};
SDL_Surface* create_marble(int d, Uint8 r, Uint8 g, Uint8 b, bool
top2bottom)
//diameter, red, green, blue. If top2bottom is true, the gradient will
go from top(full given color) to bottom (white).
{
SDL_Surface* gradient = create_surface(d);
if (top2bottom)
for (int i=0; i<d; i++) hlineRGBA(gradient, 0, d, i,
r+(0xff-r)*i/d,g+(0xff-g)*i/d, b+(0xff-b)*i/d, 0xff);
else
for (int i=0; i<d; i++) hlineRGBA(gradient, 0, d, d-i,
r+(0xff-r)*i/d,g+(0xff-g)*i/d, b+(0xff-b)*i/d, 0xff);
SDL_Surface* tmp = create_surface(d);
filledCircleRGBA(tmp, d/2, d/2, d/2-1, 0, 1, 0, 0xff);
SDL_SetColorKey(tmp, SDL_SRCCOLORKEY | SDL_RLEACCEL,
SDL_MapRGB(tmp->format, 0, 1, 0));
drawsurface(tmp,gradient);
SDL_FreeSurface(tmp);
SDL_SetColorKey(gradient, SDL_SRCCOLORKEY | SDL_RLEACCEL,
SDL_MapRGB(gradient->format, 0,0,0));
return gradient;
};
Josh Matthews schrieb:
> Your best bet would probably be creating a default image in the GIMP
> with an alpha mask, then load that with SDL_Image and overwrite the
> pixel data. Alternatively, you could avoid the alpha mask and just use
> a color key by creating an image with an inverted circle filled with
> pink. In SDL, make a surface, fill it with your gradient, then copy the
> pink pixels into your surface from your image, set the surface's color
> key and voila!
>
> On 12/31/06, *Viktor Dick* <dickviktor at gmx.net
> <mailto:dickviktor at gmx.net>> wrote:
>
> Thanks. If I understand rightly, the gradient function would put the
> lines with lineColor or something like that. Is there someone that could
> give me some code how to apply an alpa mask? I'm not familiar with
> transparency under SDL and I did not found any tutorial explaining this
> well enough.
> Thanks.
>
> Josh Matthews schrieb:
> > What if you had a gradient function that created rectangles, then
> used a
> > circular alpha mask?
> >
> > On 12/31/06, *Viktor Dick* < dickviktor at gmx.net
> <mailto:dickviktor at gmx.net>
> > <mailto:dickviktor at gmx.net <mailto:dickviktor at gmx.net>>> wrote:
> >
> > Hello,
> > I'm trying to write a simple 2D-program with SDL (I do not want to
> > use OpenGL).
> > It is almost ready, but at the moment I paint the marbles of the
> > players with
> > filledCircleColor. I have painted a circle with gimp with a
> gradient
> > from red
> > (bottom) to white (top) so it looks better. I can load the
> image to
> > the program,
> > but I need more colors and I do not want create an extra file for
> > each color. I
> > need also blue, green etc. marbles. Does anyone know how to change
> > the color in
> > a loaded surface? In the far future, it should also be possible to
> > let the users
> > switch their colors, so it would not be possible to give a
> picture
> > of each
> > possible color with the package.
> > Thanks
> > Viktor
> >
> >
> > _______________________________________________
> > SDL mailing list
> > SDL at libsdl.org <mailto:SDL at libsdl.org> <mailto:SDL at libsdl.org
> <mailto:SDL at libsdl.org>>
> > http://www.libsdl.org/mailman/listinfo/sdl
> <http://www.libsdl.org/mailman/listinfo/sdl>
> >
> >
> >
> >
> > --
> > Cheers,
> > Josh
> >
> > PGP: http://revvy.box43.net/Josh_Matthews.asc
> >
> >
> >
> ------------------------------------------------------------------------
>
> >
> > _______________________________________________
> > SDL mailing list
> > SDL at libsdl.org <mailto:SDL at libsdl.org>
> > http://www.libsdl.org/mailman/listinfo/sdl
> <http://www.libsdl.org/mailman/listinfo/sdl>
>
>
> _______________________________________________
> SDL mailing list
> SDL at libsdl.org <mailto:SDL at libsdl.org>
> http://www.libsdl.org/mailman/listinfo/sdl
> <http://www.libsdl.org/mailman/listinfo/sdl>
>
>
>
>
> --
> Cheers,
> Josh
>
> PGP: http://revvy.box43.net/Josh_Matthews.asc
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> SDL mailing list
> SDL at libsdl.org
> http://www.libsdl.org/mailman/listinfo/sdl
More information about the SDL
mailing list