我正在使用IMG_Load()加載png文件,但它根本無法工作。 loadedImage = IMG_Load(filename.c_str());在這句話之後,loadedImage仍然是NULL,沒有發生錯誤。 PS:我正在使用VS C++ 2008,png文件位於develop文件夾中。這裏是我的代碼(這正是懶惰美孚等)SDL_image的IMG_Load不起作用
//The headers
#include "SDL.h"
#include "SDL_image.h"
#include <string>
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
//Screen attributes
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;
//The surfaces
SDL_Surface *image = NULL;
SDL_Surface *screen = NULL;
SDL_Surface *load_image(std::string filename)
{
//The image that's loaded
SDL_Surface* loadedImage = NULL;
//The optimized image that will be used
SDL_Surface* optimizedImage = NULL;
//Load the image using SDL_image
loadedImage = IMG_Load(filename.c_str());
//If the image loaded
if(loadedImage != NULL)
{
//Create an optimized image
//cout<<"Flag";
optimizedImage = SDL_DisplayFormat(loadedImage);
//Free the old image
SDL_FreeSurface(loadedImage);
}
//Return the optimized image
return optimizedImage;
}
void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination)
{
//Rectangle to hold the offsets
SDL_Rect offset;
//Get offsets
offset.x = x;
offset.y = y;
//Blit the surface
SDL_BlitSurface(source, NULL, destination, &offset);
}
bool init()
{
//Initialize all SDL subsystems
if(SDL_Init(SDL_INIT_EVERYTHING) == -1)
{
return false;
}
//Set up the screen
screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE);
//If there was an error in setting up the screen
if(screen == NULL)
{
return false;
}
//Set the window caption
SDL_WM_SetCaption("PNG test", NULL);
//If everything initialized fine
return true;
}
void clean_up()
{
//Free the surface
SDL_FreeSurface(image);
//Quit SDL
SDL_Quit();
}
int main(int argc, char* args[])
{
//Initialize
if(init() == false)
{
return 1;
}
//Load the image
image = load_image("look.png");
//If there was a problem in loading the image
if(image == NULL)
{
return 5;
}
//Apply the surface to the screen
apply_surface(0, 0, image, screen);
//Update the screen
if(SDL_Flip(screen) == -1)
{
return 1;
}
//Wait 2 seconds
SDL_Delay(2000);
//Free the surface and quit SDL
clean_up();
return 0;
}
輸出返回5.
我花了半天的時間試圖找出這個相同的問題。無論我做什麼,它都會呈現一個空白的黑色圖像。發現其他dll只是需要在那裏,謝謝你張貼這個答案 – morbidhawk 2017-12-03 23:25:44