[英]SDL_Image not displaying an 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 圖像,它甚至可以工作。
如果在 Windows 上加載了 BMP 文件而 PNG 文件未加載,則說明存在 DLL 位置問題。 要在 Windows 上正確加載 PNG,SDL_image 要求 libpng 和 zlib DLL 與可執行文件位於同一目錄中。 SDL_image 的 Windows 版本使用 libpng 和 zlib 加載 PNG 文件,因此您必須將這些 DLL 放在正確的目錄中。 僅將 SDL_image DLL 與可執行文件位於同一目錄中是不夠的。
我有同樣的錯誤並使用了@MarkSzymczyk 上面給出的建議。 我只是沒有將所有需要的 dll 添加到項目文件夾中。 所以我添加了所有這些:
然后我的圖像加載。 我認為我只需要 SDL2_image 和 libpng16-16 dll,但我添加了所有這些以備將來使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.