Дисклеймер: почему собрался это делать - потому что нет нигде нормального обучения, для С\С++, поэтому все бросают это дело, так как невозможно разобраться, просто ужас.
Смысл прозрачного фона для изображения кратко:
![](https://habrastorage.org/getpro/habr/upload_files/140/0c6/5f6/1400c65f630409c0a428726a313acf5f.png)
SDL дает возможность через SDL_SetColorKey убрать фон у картинки, оставив только нужное нам изображение.
Код, поехали:
#include<SDL2/SDL.h>
int main(void)
{
SDL_Window* window; //объявление переменной окно
SDL_Renderer* gRenderer; //объявление рендерной переменной.
SDL_Surface *backgroundImage; //объявление слоев
SDL_Surface *humanImage;
SDL_Texture *backGroundTex; //объявление текстуры
SDL_Texture *humanTex;
SDL_Init(SDL_INIT_VIDEO); //яобъявление видео
window = SDL_CreateWindow( "transparentImage", 0,0,640,480,SDL_WINDOW_OPENGL); //создание окна
gRenderer = SDL_CreateRenderer(window, -1, 0); //привязка рендера к окну
SDL_SetRenderDrawColor(gRenderer, 0, 0, 50, 255); //установка цвета red green blue bright
SDL_RenderClear(gRenderer);//очистка экрана
SDL_RenderPresent(gRenderer);//обновление экрана
SDL_Delay(1000); //передышка 1 секунду
backgroundImage = SDL_LoadBMP("hw.bmp");//подгрузка изображения
humanImage = SDL_LoadBMP("foo.bmp");
SDL_SetColorKey( humanImage, SDL_TRUE, SDL_MapRGB( humanImage->format, 0, 0xFF, 0xFF ) ); //создание прозрачного изображения
backGroundTex = SDL_CreateTextureFromSurface(gRenderer,backgroundImage); //создание текстуры
SDL_RenderCopy(gRenderer,backGroundTex,NULL,NULL); //копирование текстуры в рендер
SDL_RenderPresent(gRenderer);
SDL_Delay(1000);
humanTex = SDL_CreateTextureFromSurface(gRenderer,humanImage);
/*уменьшение изображения*/
SDL_Rect topLeftViewport;
topLeftViewport.x = 220;
topLeftViewport.y = 220;
topLeftViewport.h = 300;
topLeftViewport.w = 250;
SDL_RenderSetViewport( gRenderer,&topLeftViewport);
SDL_RenderCopy(gRenderer, humanTex,NULL,NULL);
SDL_RenderPresent(gRenderer);
SDL_Delay(3000);
SDL_DestroyWindow(window); //уничтожение окна
SDL_Quit(); //выход
return 0;
}
Комментарии (7)
WhiteBlackGoose
23.09.2021 12:20+5SDL_Window* window; //инициализация переменной окно SDL_Renderer* gRenderer; //инициализация рендерной переменной. SDL_Surface *backgroundImage; //инициализация слоев SDL_Surface *humanImage; SDL_Texture *backGroundTex; //инициализация текстуры SDL_Texture *humanTex;
Объявление переменных вижу. Инициализацию - не вижу.
maaGames
23.09.2021 13:29//установка цвета red green blue black
:D
А вообще, из-за картинки hw.bmp даже минус автору ставить перехотелось.
includedlibrary
24.09.2021 01:08нет нигде нормального обучения, для С\С++
https://wiki.libsdl.org/Tutorials
Ссылка номер 2 в списке - SDL2 Game Tutorials
jknight
Честно говоря, смотрю на все такие "уроки" и одного не понимаю.
На кой черт жаловаться на "нет нигде нормального обучения", а затем вставлять в статью кучу не особенно понятного кода без внятных комментариев? Что такое текстуры, слои, рендереры, что они еще могут? Зачем очистки, обновления и "передышки"? Где вообще текст и тело статьи?
Ваше обучение - такое же точно, как и все остальное на эту тему в этом нашем интернете.
scorpka Автор
спасибо за комментарий, если что это 8 урок, то есть то что такое текстуры рендеры и слои объяснено до этого урока.
Giperoglif
а почему у вас уроки с 8го начинаются? другие скрыты?
scorpka Автор
https://habr.com/ru/users/LLEMOON/posts/