SDL блин с маской - PullRequest
       5

SDL блин с маской

1 голос
/ 24 мая 2011

У меня есть SDL_image / surface (оригинал), который я хотел бы "ослепить" против другого SDL_image / surface, который является маской для копирования частей из оригинала.

Маска использует 255чтобы определить части, которые нужно сохранить, и 0, чтобы определить области, которые должны быть удалены из изображения.

В настоящее время я делаю обход пикселей по маске и исходному изображению, и это вызывает много проблем в выводе.

Существует ли уже существующий метод, позволяющий сделать это с помощью функции блитинга SDL?

Ответы [ 2 ]

1 голос
/ 24 мая 2011

Похоже, ваша "маска" - это альфа-канал. Создайте SDL_image с поддержкой альфа.

0 голосов
/ 28 апреля 2015

Добавление ответа SDL2 на случай, если кто-то ищет решение. Никаких дополнительных библиотек.

В API SDL2 доступна следующая функция:

int SDL_SetColorKey(SDL_Surface* surface,
                    int          flag,
                    Uint32       key)

Используется для установки прозрачного пикселя на поверхности. В приведенном ниже примере фрагмента моего хобби-хака он используется при загрузке изображения.

void* MGWindow::loadBMPImage(std::string fileName, bool transparent) 
{
    SDL_Surface* loadedImage = NULL;
    SDL_Texture* optimizedImage = NULL;
    loadedImage = SDL_LoadBMP(fileName.c_str());
    if(loadedImage != NULL)
    {
        if(transparent)
        {
            // TODO: Make it possible to have other color codes than
            // zero represent transparency
            SDL_SetColorKey(loadedImage, SDL_TRUE, 0);
        }
        optimizedImage = SDL_CreateTextureFromSurface(m_Renderer, loadedImage);
        SDL_FreeSurface(loadedImage);
    }
    return (void*)optimizedImage;
}

Справка:

https://wiki.libsdl.org/SDL_SetColorKey

...