0

他のさまざまな 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 画像は読み込めません。

4

2 に答える 2

4

Windows で BMP ファイルが読み込まれ、PNG ファイルが読み込まれない場合は、DLL の場所に問題があります。Windows で PNG を正しく読み込むには、SDL_image で libpng および zlib DLL が実行可能ファイルと同じディレクトリに存在する必要があります。SDL_image の Windows バージョンは libpng と zlib を使用して PNG ファイルをロードするため、これらの DLL を正しいディレクトリに配置する必要があります。SDL_image DLL を実行可能ファイルと同じディレクトリに置くだけでは十分ではありません。

于 2013-09-25T18:18:41.717 に答える