Не удается загрузить изображение с IMG_Load ()

У меня проблема с библиотекой SDL_image. Я написал простую программу, загружающую таблицу спрайтов и анимирующую ее левой кнопкой мыши. Вот код:

#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>

const int sw=800;
const int sh=450;

int main(){
SDL_Init(SDL_INIT_EVERYTHING);
IMG_Init(IMG_INIT_PNG);

bool quit=false;
bool shoot=false;
SDL_Event event;
Uint32 time;
unsigned  char frame=0;SDL_Window* window = SDL_CreateWindow("Sprite",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,sw,sh,0);
SDL_Renderer* render = SDL_CreateRenderer(window,-1,0);

SDL_Surface* image = IMG_Load("p_pt_12.png");
printf("IMG_Load: %s\n", IMG_GetError());

SDL_Texture* texture = SDL_CreateTextureFromSurface(render, image);

while(!quit){
if(shoot){
time=SDL_GetTicks();
time/=(750/5);
frame=time%5;
if(frame==4){
frame = 0;
shoot=false;
}
}
SDL_Rect srcrect = { frame*96,0,96,96};
SDL_Rect dstrect = { (sw-96)/2, (sh-96)/2, 96, 96 };SDL_PollEvent(&event);
switch (event.type){
case SDL_QUIT:
quit = true;
break;
case SDL_MOUSEBUTTONDOWN:
if(event.button.button == SDL_BUTTON_LEFT) shoot = true;
break;
}

SDL_RenderClear(render);
SDL_RenderCopy(render, texture,&srcrect,&dstrect);
SDL_RenderPresent(render);
}

SDL_DestroyTexture(texture);
SDL_FreeSurface(image);
SDL_DestroyRenderer(render);
SDL_DestroyWindow(window);
IMG_Quit();
SDL_Quit();

return 0;
}

Проблема в том, что когда я пытаюсь его запустить, IMG_Load () возвращает указатель NULL, а IMG_GetError () говорит «Неподдерживаемый формат файла». Spritesheet — это файл .png, но то же самое происходит с .jpg spritesheet. Я уверен, что код правильный, потому что он работает на другом устройстве с точно таким же файлом изображения, как брелок. Я попытался переустановить SDL и SDL_image, но это не работает. SDL_RWops и IMG_LoadPNG_RW тоже не помогают. Я использую Eclipse Kepler SR2 (но я также пытался запустить его с Code :: Blocks 12.11 с тем же результатом) на 64-битной Linux Mint.

Я буду признателен за любую помощь, спасибо!

1

Решение

Ваш код правильный и работает на меня. Вероятно, в вашей системе отсутствуют некоторые библиотеки, необходимые sdl_image для обработки изображений, такие как libpng и zlib. Установите их и дайте нам знать, если это сработало.

2

Другие решения


По вопросам рекламы [email protected]