loaded Image = img_Load(filename.c_str());在这句话之后,loadedImage仍为NulL,没有发生错误.
PS:我使用的是VS C 2008,png文件位于开发文件夹中.这是我的代码:(这正是Lazy Foo的样子)
//The headers#include "SDL.h"#include "SDL_image.h"#include <string>#pragma comment( linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )//Screen attributesconst int SCREEN_WIDTH = 640;const int SCREEN_HEIGHT = 480;const int SCREEN_BPP = 32;//The surfacesSDL_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,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.
解决方法 我的错. 我只是将SDL_image.dll复制到exe floder. 我还应该复制zlib1.dll和libpng12-0.dll 实际上,所有的dll都是需要的,因为如果没有这样的dll,程序将不会给出任何错误提示,这是令人困惑的. 总结以上是内存溢出为你收集整理的sdl-image – SDL_image的IMG_Load不起作用全部内容,希望文章能够帮你解决sdl-image – SDL_image的IMG_Load不起作用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)