为什么赢得表面我创建的负载?

时间:2017-01-23 15:15:18

标签: c++ eclipse image-processing sdl-2

我无法使用以下代码尝试加载此.png图像:

#include <iostream>
#include <SDL.h>
#include<SDL_image.h>
#include<string>


SDL_Texture *LoadTexture(std::string filePath,SDL_Renderer*renderTarget)
{
    SDL_Texture *texture=NULL;
    SDL_Surface *surface= IMG_Load(filePath.c_str());
    if(surface==NULL)
        std::cout<<"Error1"<<std::endl;
    else
    {
        texture=SDL_CreateTextureFromSurface(renderTarget,surface);
        if(texture==NULL)
            std::cout<<"Error2"<<std::endl;
    }
    SDL_FreeSurface(surface);
    return texture;
}

int main(int argc, char*argv[]) {
//Initializing and loading variables

    SDL_Window *window=NULL;
    SDL_Renderer *renderTarget=NULL;
    int currentTime=0;
    int prevTime=0;
    float delta=0.0f;
    const Uint8 *keystate;
    SDL_Rect camerRect={0,0,222,290};

    SDL_Init(SDL_INIT_VIDEO);

    int data=10;

    window=SDL_CreateWindow("SDL CodingMadeEeasY Series", SDL_WINDOWPOS_CENTERED,
            SDL_WINDOWPOS_CENTERED,222,290, SDL_WINDOW_SHOWN);
    renderTarget= SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED );

    SDL_Texture *texture=LoadTexture("spaceship_stock2.png",renderTarget);


    bool isRunning=true;
    SDL_Event ev;

    while(isRunning)
    {
        prevTime=currentTime;
        currentTime=SDL_GetTicks();
        delta=(currentTime-prevTime)/1000.0f;
        while(SDL_PollEvent(&ev) != 0)
        {
            //Getting the events
            if(ev.type==SDL_QUIT)
                isRunning=false;
        }

        keystate=SDL_GetKeyboardState(NULL);

        SDL_RenderClear(renderTarget);
        SDL_RenderCopy(renderTarget,texture,&camerRect,NULL);
        SDL_RenderPresent(renderTarget);

    }
        SDL_DestroyWindow(window);
        SDL_DestroyRenderer(renderTarget);
        SDL_DestroyTexture(texture);

        texture=nullptr;
        window=nullptr;
        renderTarget=nullptr;

        IMG_Quit();
        SDL_Quit();



return 0;
}

窗口输出:正确大小的黑色窗口。

控制台输出:Error1

错误:此项目中没有其他错误,只是由于未使用的变量而引起的警告。

编译器无法找到我的png文件,即使我有一个保存在debug文件夹中的spaceship_stock2.png副本和一个保存在release文件夹中的副本。调试当前处于活动状态,我正在使用Eclipse Helios。

我已经包含了库标志,并为库和包含设置了正确的路径。

这是对a tutorial for scrolling backgrounds中CODING MADE EASY代码的略微修改。

1 个答案:

答案 0 :(得分:0)

我能够得到这段代码来编译和显示图像就好了。我更改的唯一内容是<SDL.h>"SDL.h"<SDL_image.h>"SDL_image.h"

然后编译,我跑了

c++ code_file_name.cpp `sdl2-config --cflags --libs` -lSDL2_image

在我的Linux系统上。