Дисклеймер: почему собрался это делать - потому что нет нигде нормального обучения, для С\С++, поэтому все бросают это дело, так как невозможно разобраться, просто ужас.

Смысл прозрачного фона для изображения кратко:

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)


  1. jknight
    23.09.2021 11:59
    +10

    Честно говоря, смотрю на все такие "уроки" и одного не понимаю.

    На кой черт жаловаться на "нет нигде нормального обучения", а затем вставлять в статью кучу не особенно понятного кода без внятных комментариев? Что такое текстуры, слои, рендереры, что они еще могут? Зачем очистки, обновления и "передышки"? Где вообще текст и тело статьи?

    Ваше обучение - такое же точно, как и все остальное на эту тему в этом нашем интернете.


    1. scorpka Автор
      23.09.2021 16:32
      -1

      спасибо за комментарий, если что это 8 урок, то есть то что такое текстуры рендеры и слои объяснено до этого урока.


      1. Giperoglif
        06.10.2021 07:45

        а почему у вас уроки с 8го начинаются? другие скрыты?



  1. WhiteBlackGoose
    23.09.2021 12:20
    +5

      SDL_Window* window; //инициализация переменной окно
      SDL_Renderer* gRenderer; //инициализация рендерной переменной.
      
      SDL_Surface *backgroundImage; //инициализация слоев
      SDL_Surface *humanImage;
      
      SDL_Texture *backGroundTex;  //инициализация текстуры
      SDL_Texture *humanTex;  

    Объявление переменных вижу. Инициализацию - не вижу.


    1. maaGames
      23.09.2021 13:29

      //установка цвета red green blue black

      :D

      А вообще, из-за картинки hw.bmp даже минус автору ставить перехотелось.


  1. includedlibrary
    24.09.2021 01:08

    нет нигде нормального обучения, для С\С++

    https://wiki.libsdl.org/Tutorials

    Ссылка номер 2 в списке - SDL2 Game Tutorials