2012-07-09 3 views
1

그래서 SDL 라이브러리를 사용하여 단순한 이미지를 표시하려하지만 SDL_BlitSurface() 함수를 사용하면 아무 일도 일어나지 않고 검정색 화면 만 표시됩니다. 나는 또한 .bmp 파일, 소스 및 실행 파일이 모두 같은 디렉토리에 있음을 알아야한다.SDL_BlitSurface()가 이미지를 표시하지 않습니까?

//SDL Header 
#include "SDL/SDL.h" 

int main(int argc, char* args[]) 
{ 
    //Starts SDL 
    SDL_Init(SDL_INIT_EVERYTHING); 

    //SDL Surfaces are images that are going to be displayed. 
    SDL_Surface* Hello = NULL; 
    SDL_Surface* Screen = NULL; 

    //Sets the size of the window (Length, Height, Color(bits), Sets the Surface in Software Memory) 
    Screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); 
    //Loads a .bmp image 
    Hello = SDL_LoadBMP("Hello.bmp"); 
    //Applies the loaded image to the screen 
    SDL_BlitSurface(Hello, NULL, Screen, NULL); 
    //Update Screen 
    SDL_Flip(Screen); 
    //Pause 
    SDL_Delay(2000); 
    //Deletes the loaded image from memory 
    SDL_FreeSurface(Hello); 
    //Quits SDL 
    SDL_Quit(); 

    return 0; 
} 

답변

0

다른 유형의 이미지를 블리밍 해 보셨습니까? 처음 SDL을 시작했을 때 .bmp 파일에 문제가 있음을 기억합니다. .jpg 또는 .png를 시도하고 코드 작동 여부에 관계없이 나에게 연락하십시오.

+0

과 동일? SDL_LoadJPG()? –

+0

내가 전에 말했던 내용을 스크랩합니다. 코드가 저에게 효과적입니다. 프로젝트의 .dll 파일이 누락되었습니다. – reagan

+0

그럴 수 있습니다. 나는 우분투에있어 .dll이 어디에 있는지 알고 있니? –

0

나는 "문제"가 비슷했다. 어쩌면 그래픽 드라이버와 호환되지 않는 버전 또는 버전 일 수 있습니다. 알아 내자. SW 표면 및 뒤집기; 내가 기억 하듯이 플립 기능은 더블 버퍼링 된 HW_Surface에서만 작동합니다.

Screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); 

반전 대신 업데이트를 시도하십시오.

SDL_Update(surface); 

그리고 nexttime :

Hello = SDL_LoadBMP("Hello.bmp"); 
if(Hello != NULL) { 
    //Applies the loaded image to the screen 
    SDL_BlitSurface(Hello, NULL, Screen, NULL); 
    //Update Screen 
    ... 
    //Deletes the loaded image from memory 
    SDL_FreeSurface(Hello); 
} 

SDL_FreeSurface(NULL) 때문에 당신을 programm를 충돌합니다.

+0

'SDL_Flip'이 더블 버퍼가 아닌 서페이스에서 호출되면 내부적으로'SDL_UpdateRect'를 자동으로 호출합니다. 따라서 모든 비디오 화면에서 작동해야합니다. 또한,'SDL_FreeSurface (NULL)'은 프로그램을 충돌시키지 않습니다 (SDL_FreeSurface는'NULL'과 함께 호출 될 때 반환됩니다). – tobbez

1

LoadBMP()는 쓰레기입니다. (. 패키지의 이름에 대해 확실하지 그냥 그들을 찾을 적성이나 시냅스 또는 무엇이든을 사용)

sudo apt-get install SDL_image SDL_image_dev 

SDL_image 라이브러리를 설치 당신은 당신의 이미지를로드

#include "SDL_image.h" 

함께

및 포함 다음과

SDL_Surface* Hello = IMG_Load("Hello.bmp"); 
if (!Hello){ 
    printf("Ooops, something went wrong: %s\n", IMG_GetError()); 
    exit(0); 
} 

중요 : 항상 오류 검사를 수행하고 오류를 인쇄해야합니다.

if (!Hello)는 함수가 .JPG를 표시하는 것입니다 뭔지 알아 if (Hello == NULL)

관련 문제