开发者

Bitmap won't load in SDL

****FIXED****** It turns out my bitmap file was somehow corrupted. I could open the file to view it but my application couldn't. I made a new image and it works fine.

I am having problems displaying a bitmap image in sdl. The program exits with code 2 so I know the bitmap is not loadin开发者_开发技巧g. I am using vc2010 on windows 7 64bit. The name of the BMP is hello.bmp and I tried placing it next to the application file, source file, and project file but it still won't load it. I have also tried just placing it in c:\ and loading it from there with no luck. This is the first time I have tried using SDL. Here is the code:

#include "stdlib.h"
#include "SDL.h"

    int main(int argc, char *argv[])
    {
        SDL_Surface *screen;    //This pointer will reference the backbuffer
        SDL_Surface *image;    //This pointer will reference our bitmap sprite
        SDL_Surface *temp;    //This pointer will temporarily reference our bitmap sprite
        SDL_Rect src, dest;    //These rectangles will describe the source and destination regions of our blit

        //We must first initialize the SDL video component, and check for success
        if (SDL_Init(SDL_INIT_VIDEO) != 0) {
            printf("Unable to initialize SDL: %s\n", SDL_GetError());
            return 1;
        }

        //When this program exits, SDL_Quit must be called
        atexit(SDL_Quit);

        //Set the video mode to fullscreen 640x480 with 16bit colour and double-buffering
        screen = SDL_SetVideoMode(640, 480, 16, SDL_DOUBLEBUF | SDL_FULLSCREEN);
        if (screen == NULL) {
            printf("Unable to set video mode: %s\n", SDL_GetError());
            return 1;
        }

        //Load the bitmap into a temporary surface, and check for success
        temp = SDL_LoadBMP("hello.bmp");
        if (temp == NULL) {
            printf("Unable to load bitmap: %s\n", SDL_GetError());
            return 2;
        }

        //Convert the surface to the appropriate display format
        image = SDL_DisplayFormat(temp);

        //Release the temporary surface
        SDL_FreeSurface(temp);

        //Construct the source rectangle for our blit
        src.x = 0;
        src.y = 0;
        src.w = image->w;    //Use image->w to display the entire width of the image
        src.h = image->h;    //Use image->h to display the entire height of the image

        //Construct the destination rectangle for our blit
        dest.x = 100;        //Display the image at the (X,Y) coordinates (100,100)
        dest.y = 100;
        dest.w = image->w;    //Ensure the destination is large enough for the image's entire width/height
        dest.h = image->h;

        //Blit the image to the backbuffer
        SDL_BlitSurface(image, &src, screen, &dest);

        //Flip the backbuffer to the primary
        SDL_Flip(screen);

        //Wait for 2500ms (2.5 seconds) so we can see the image
        SDL_Delay(2500);

        //Release the surface
        SDL_FreeSurface(image);

        //Return success!
        return 0;
    }


You are loading a bitmap. So if you are using visual studio there is an easy fix. Go to add new file, then click on resource. There is a bitmap file you can create in visual studio. So copy your bitmap and then click edit on visual studio with the bitmap plain open and click paste. Boom done, change the name of your image to your image in the code and then it will work just fine because there is no linking issues.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜