сделать фон спрайта прозрачным в SDL - PullRequest
3 голосов
/ 21 марта 2019

Как изменить цвет фона спрайтов на прозрачный, изменив альфа после загрузки его в SDL_Surface. Существуют ли какие-либо функции в SDL, которые используют алгоритм типа заливки и изменяют все пиксели с данным цветом на прозрачные снаружи. Я не хочу, чтобы это происходило внутри границы спрайта, если используется тот же цвет.

Образец изображения:

Sprite Image

Я бы хотел сделать фон синим здесь прозрачным, прежде чем я перетащу его на поверхность окна с помощью SDL_BlitSurface.

1 Ответ

1 голос
/ 27 марта 2019

Только цветовой ключ (SDL_SetColorKey()) или полный альфа-канал помогут вам здесь.

Обратите внимание, что вы можете предоставить альфа-канал в исходной графике, если вы используете такой формат, как PNG. Если вам иногда требуется / требуется альфа, укажите альфа-канал в исходной графике и используйте SDL_SetSurfaceBlendMode() с SDL_BLENDMODE_NONE для смешивания без альфы и SDL_BLENDMODE_BLEND для смешивания с ним.

И SDL_Surface, и SDL_Texture поддерживают SDL_BlendMode.

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

Возможно, вы захотите взглянуть на SDL_Texture и SDL_Renderer и переключиться на использование «текстурного атласа» вместо отдельных поверхностей / текстур для каждого изображения, чтобы максимизировать производительность.

...