* ****** 1004 1005 * FIXED ******
Оказывается, мой растровый файл был как-то поврежден. Я мог открыть файл, чтобы просмотреть его, но мое приложение не смогло. Я сделал новое изображение, и оно отлично работает.
У меня проблемы с отображением растрового изображения в sdl. Программа завершается с кодом 2, поэтому я знаю, что растровое изображение не загружается. Я использую vc2010 на Windows 7 64bit. Имя BMP - hello.bmp, и я попытался поместить его рядом с файлом приложения, исходным файлом и файлом проекта, но он все равно не загружается Я также попытался просто поместить его в c: \ и загрузить его оттуда без удачи. Это первый раз, когда я пытался использовать SDL. Вот код:
#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;
}