Вы можете настроить альфа каждой поверхности индивидуально, это не повлияет на другие поверхности.Единственное условие - поверхность должна иметь альфа-канал.Чтобы проверить, есть ли альфа-канал, сделайте следующее:
SDL_Surface *surface; // Assume this has been allocated elsewhere.
if (surface->format->Amask != 0)
{
// You have an alpha channel
}
else
{
// Make a copy to a surface with an alpha channel.
}
В противном случае, тогда да, вам придется скопировать изображение на новую поверхность с альфа-каналом.Это отвечает на ваш вопрос?
[РЕДАКТИРОВАТЬ] Вот как вы можете скопировать части поверхности в другую.Это частично основано на документации здесь .
SDL_Rect cropBox = { 5, 103, 200, 200 };
SDL_Rect position = {0,0,0,0};
Uint32 rmask, gmask, bmask, amask;
/* SDL interprets each pixel as a 32-bit number, so our masks must depend
on the endianness (byte order) of the machine */
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
rmask = 0xff000000;
gmask = 0x00ff0000;
bmask = 0x0000ff00;
amask = 0x000000ff;
#else
rmask = 0x000000ff;
gmask = 0x0000ff00;
bmask = 0x00ff0000;
amask = 0xff000000;
#endif
SDL_Surface *newSurface = SDL_CreateRGBSurface(SDL_SWSURFACE,cropBox.w,
cropBox.h,32,rmask,gmask,bmask,amask);
SDL_BlitSurface(pumpkins,cropBox,newSurface,position);
Так что, да, создайте поверхность нужного размера с альфа-каналом, а затем добавьте к ней.