다시 코드를 붙이면 작업 방법을 알 수 없습니다. 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을 반환합니다). 그래서 왜 창이 검은 색인지, 어떤 이미지가 표시되는지 모르겠습니다.
BMP 형식을 확인하십시오. 24 또는 32 비트입니까? –
그것은 24 비트이며, 적어도 말했듯이, SDL_LoadBMP는 너비와 높이를 올바르게 가져옵니다. – ali
BMP를 32 비트로 변환하면 제대로 작동합니다. –