Блиттинг SDL с маской

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

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

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

Существует ли ранее существовавший метод для этого с использованием функций SDL blitting?


sdl
person ct_    schedule 23.05.2011    source источник


Ответы (2)


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

person Ben Voigt    schedule 23.05.2011
comment
как бы я на самом деле сделал блит хотя? - person ct_; 24.05.2011
comment
@ct: Вероятно, как текстурированный квадроцикл. Используете ли вы SDL для настройки контекста OpenGL или собственные функции рендеринга SDL? - person Ben Voigt; 25.05.2011
comment
использование SDL для настройки контекста OpenGL - person ct_; 10.06.2011

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

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

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

person Martin G    schedule 28.04.2015