Посмотрите на скриншот ниже. Отображаются три тонкие поверхности SDL 2.0, все более или менее прямоугольные.
Размытие изображения 1 на изображение 2 - получить изображение 3
Первая поверхность (коричневатая бумагаone) is Image 1 Белый под ним с пропущенными двумя углами: Image 2
Я хотел бы выполнить SDL_BlitSurface так, чтобы изображение 1 было перетащено наИзображение 2, но с формой изображения 2 (другими словами, конечный результат должен выглядеть как коричневая бумага, но пропущены два его угла.
Чтобы сделать это, я пытаюсь:
SDL_BlitSurface(Image1, NULL, Image2, NULL);
Но вместо желаемого результата я получаю третью поверхность на изображении (Изображение 3), которая аналогична изображению 1
ОБНОВЛЕНИЕ
Итак, по совету keltar, я заменил свой вызов функции blit вызовом специальной функции, которая, я надеюсь, копирует альфа-канал для каждого пикселя с изображения 1 на изображение 2
copy_alpha(Image1, Image2);
void IMAGETOOL::copy_alpha(SDL_Surface * src, SDL_Surface * dst)
{
int w = src->w,
h = src->h;
Uint32 opixel, npixel;
Uint8 r, g, b, a;
if (SDL_MUSTLOCK(src)) SDL_LockSurface(src);
if (SDL_MUSTLOCK(dst)) SDL_LockSurface(dst);
Uint8 srcAlpha = 0;
for (int y = 0; y < h; y++)
for (int x = 0; x < w; x++)
{
opixel = get_pixel(src, x, y);
SDL_GetRGBA(opixel, src->format, &r, &g, &b, &a);
srcAlpha = a;
opixel = get_pixel(dst, x, y);
SDL_GetRGBA(opixel, dst->format, &r, &g, &b, &a);
a = srcAlpha;
npixel = SDL_MapRGBA(dst->format, r, g, b, a);
put_pixel(dst, x, y, npixel);
}
if (SDL_MUSTLOCK(src)) SDL_UnlockSurface(src);
if (SDL_MUSTLOCK(dst)) SDL_UnlockSurface(dst);
}
. результирующая поверхность изменилась. но не так, как я надеялся.
Копирование альфа с изображения 1 на изображение 2 - получить изображение 3
Не знаете, что с этим делать - есть идеи?