지금까지 SDL을 설치하고, 창을 띄우고, 키보드 입력을 받아보았다.
이번에는 이미지를 띄워보자.
이미지를 띄우기 위해서는 SDL_image 를 설치해야한다.
SDL_image 설치
리눅스
apt 로 설치하면 끝이다
sudo apt install libjpeg-dev libwebp-dev libtiff5-dev libsdl2-image-dev libsdl2-image-2.0-0 -y;
Bash
복사
맥 (intel)
위 링크로 가서,
이걸 다운받고, 압축을 푼다.
해당 폴더로 가서 아래의 명령어를 실행한다.
./configure
make all
make install
Bash
복사
윈도우
위 링크로 가서,
이걸 다운받고, 압축을 푼다
이전에 했던것과 동일한데, i686-264-mingw32 폴더에 들어가서,
폴더에있는 내용을 MinGW 설치 경로에 폴더별로 옮겨주면 된다.
SDL_image 설치 확인
테스트 코드
•
아무 사진(image.png)을 준비한다.
•
아래의 코드를 복사한다.
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <stdio.h>
#include <stdbool.h>
SDL_Window *window;
SDL_Renderer *renderer;
// Window dimensions
static const int width = 800;
static const int height = 600;
static int initAll()
{
if (SDL_Init(SDL_INIT_EVENTS) != 0)
{
fprintf(stderr, "%s\n", (SDL_GetError()));
return (0);
}
// Create an SDL window
window = SDL_CreateWindow("Hello World", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_OPENGL);
if (window == 0)
{
fprintf(stderr, "%s\n", (SDL_GetError()));
return (0);
}
// Create a renderer (accelerated and in sync with the display refresh rate)
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (renderer == 0)
{
fprintf(stderr, "%s\n", (SDL_GetError()));
return (0);
}
int imgFlags = IMG_INIT_PNG;
if( !( IMG_Init( imgFlags ) & imgFlags ) )
{
printf( "SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError() );
return (0);
}
return (1);
}
static void closeAll()
{
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
IMG_Quit();
SDL_Quit();
}
SDL_Texture *loadTexture(const char *file){
SDL_Surface *surface;
SDL_Texture *texture;
surface = IMG_Load(file);
if (surface == NULL){
printf("fail to read %s\n", file);
return NULL;
}
texture = SDL_CreateTextureFromSurface(renderer, surface);
if (texture == NULL){
printf("unable to create texture.\n");
}
SDL_FreeSurface(surface);
return texture;
}
void drawTexture(SDL_Renderer *renderer,int x,int y,SDL_Texture *texture){
SDL_Rect src;
SDL_Rect dst;
src.x = 0;
src.y = 0;
SDL_QueryTexture(texture, NULL, NULL, &src.w, &src.h);
dst.x = x;
dst.y = y;
dst.w = src.w;
dst.h = src.h;
SDL_RenderCopy(renderer, texture, NULL, &dst);
}
int main(int argc,char **argv){
initAll();
SDL_Texture *texture;
texture = loadTexture("image.png");
bool quit = false;
SDL_Event event;
while(!quit){
while(SDL_PollEvent(&event)){
switch(event.type){
case SDL_QUIT:
quit = true;
break;
}
}
SDL_RenderClear(renderer);
drawTexture(renderer, width / 2, height / 2, texture);
SDL_RenderPresent(renderer);
}
SDL_DestroyTexture(texture);
closeAll();
return 0;
}
C
복사
리눅스
gcc test_image.c -lSDL2 -lSDL2_image
Bash
복사
맥 (intel)
gcc test_image.c -lSDL2 -lSDL2_image
Bash
복사
윈도우
gcc test_image.c -lmingw32 -lSDL2main -lSDL2 -lSDL2_image
Bash
복사