2013-02-28 4 views
0

다시 코드를 붙이면 작업 방법을 알 수 없습니다. SDL 표면을 만들고 비트 맵 이미지를로드하여 표시하려고합니다. 내 코드는 다음과 같습니다.SDL_BlitSurface가 작동하지 않습니다. - 표면에 이미지가 보이지 않습니다.

struct Image { 
    string  Name; 
    SDL_Surface* Surface; 
}; 

int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, PSTR lpCmdL, INT nCmdS) { 
    // Will store our bitmap 
    Image NewImage; 

    // Initialization 
    SDL_Init(SDL_INIT_EVERYTHING); 

    // Create main window 
    SDL_Surface *Window = SDL_SetVideoMode(640,480,32,SDL_HWSURFACE|SDL_DOUBLEBUF); 
    SDL_WM_SetCaption("MyApp", "MyApp"); 

    // Load image and make it compatible 
    SDL_Surface* Surf_Temp = NULL; 
    if((Surf_Temp = SDL_LoadBMP("myimage.bmp")) != NULL) { 
     NewImage.Name = "MyImage"; 
     NewImage.Surface = SDL_DisplayFormat(Surf_Temp); 
     SDL_FreeSurface(Surf_Temp); 
    } 

    // Draw image over the window 
    if (NewImage.Surface != NULL && Window != NULL) { 
     SDL_Rect DestR; 
       DestR.x = 0; 
       DestR.y = 0; 
     if (SDL_BlitSurface(NewImage.Surface, NULL, Window, &DestR) == -1) { 
      MessageBox(NULL, "Error", "Alert", MB_OK); 
     } 
    } 

    // Run 
    SDL_Event Event; 
    while(!End) { 
     while(SDL_PollEvent(&Event)) { 
      EventsHandler(&Event); 
     } 
    } 
    return 0; 
} 

글쎄 이미지가 올바르게로드되었습니다. NewImage.Surface-> w (너비)를 가져 와서 확인했습니다.이 너비는 올바른 비트 맵의 ​​너비입니다. 어떤 오류 메시지도 표시되지 않습니다 (SDL_BlitSurface는 0을 반환합니다). 그래서 왜 창이 검은 색인지, 어떤 이미지가 표시되는지 모르겠습니다.

+0

BMP 형식을 확인하십시오. 24 또는 32 비트입니까? –

+0

그것은 24 비트이며, 적어도 말했듯이, SDL_LoadBMP는 너비와 높이를 올바르게 가져옵니다. – ali

+0

BMP를 32 비트로 변환하면 제대로 작동합니다. –

답변

2

blit 후 화면을 업데이트하려면 SDL_Flip으로 전화해야합니다.

SDL_Flip(Window); 

double buffering도 참조하십시오.

+0

좋은 점, 나는 완전히 명백한 것을 생각하지 않았습니다. –

+0

실종 된 것을 알고있었습니다. 감사 – ali

관련 문제