SDL_Image не отображает изображение
После исправления различных других ошибок SDL (как с самим SDL, так и с SDL_Image) я написал этот безошибочный код:
#include <SDL.h>
#include <SDL_image.h>
#include <iostream>
#include <string>
using namespace std;
#define null 0
SDL_Window *window = nullptr;
SDL_Renderer *renderer = nullptr;
SDL_Texture* LoadImage(string file)
{
SDL_Texture *texture = nullptr;
texture = IMG_LoadTexture(renderer, file.c_str());
if (texture == nullptr)
cout << "Failed to load image: " + file + IMG_GetError();
return texture;
}
void ApplySurface(int x, int y, SDL_Texture *textureArgument, SDL_Renderer *rendererArgument)
{
SDL_Rect pos;
pos.x = x;
pos.y = y;
SDL_QueryTexture(textureArgument, null, null, &pos.w, &pos.h);
SDL_RenderCopy(rendererArgument, textureArgument, null, &pos);
}
int main(int argc, char* argv[])
{
if (SDL_Init(SDL_INIT_EVERYTHING))
return 1;
window = SDL_CreateWindow("ShitHappens", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN);
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
SDL_Texture *image = nullptr;
image = LoadImage("image.png");
SDL_RenderClear(renderer);
int iW, iH;
SDL_QueryTexture(image, NULL, NULL, &iW, &iH);
int x = 640 / 2 - iW / 2, y = 480 / 2 - iH / 2;
ApplySurface(x, y, image, renderer);
SDL_RenderPresent(renderer);
SDL_Delay(2000);
SDL_DestroyTexture(image);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
return 0;
}
Который до сих пор не отображает изображение под вопросом. Я попытался заменить функции на изображение SDL_LoadBMP(), и это успешно, даже если я загружаю изображение BMP через текущий код, но не изображение PNG.
2 ответа
Если файлы BMP загружаются, а файлы PNG не загружаются в Windows, у вас есть проблема с расположением DLL. Для правильной загрузки PNG в Windows SDL_image требует, чтобы библиотеки libpng и zlib находились в том же каталоге, что и исполняемый файл. Версия SDL_image для Windows использует libpng и zlib для загрузки файлов PNG, поэтому вы должны поместить эти DLL в правильный каталог. Недостаточно просто поместить DLL-библиотеку SDL_image в тот же каталог, что и исполняемый файл.
У меня была такая же ошибка, и я воспользовался советом @MarkSzymczyk, данным выше. Я просто не добавил все необходимые dll в папку проекта. Итак, я добавил все это:
- SDL2_image.dll
- libjpeg-9.dll
- libpng16-16.dll
- libtiff-5.dll
- libwebp-7.dll
Затем мое изображение загрузилось. Я думаю, что мне нужны были только dll SDL2_image и libpng16-16, но я добавил их все для будущего использования.