Search
Duplicate
🍏

SDL 2.0 을 알아보자 (4탄) - SDL_image 설치

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
C
Graphics
Scrap
태그
9 more properties
지금까지 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
복사

Reference