2013-05-17 2 views
1

현재 SDL 앱에 bmp 파일을 사용하고 있지만 내 EXE 파일을 숨기고 싶습니다. BMP는 매우 단순하기 때문에 헤더 파일에 원시 바이트로 옮기는 것이 좋은 방법이라고 생각했습니다. & 흰색 패턴.SDL에서 Raw Pixel Bitmap을로드하는 방법은 무엇입니까?

SDL 만 사용하여 가능할지 모르지만 지금까지는 간단한 패턴의 비트를로드하지 못했습니다.

// data.h  
const unsigned char rawPixels[] = 
{ 
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF,0xFF, 0xFF, 0xFF, 0xFF, 
}; 


// main.cpp 
... 
SDL_RWops *pixelsWop = SDL_RWFromConstMem((const unsigned char *)rawPixels, sizeof(rawPixels)); 
SDL_Surface *pixelsSurface = SDL_LoadBMP_RW(pixelsWop, 1); 
SDL_BlitSurface(pixelsSurface, NULL, NULL, NULL); 
... 

나는 단지 SDL_LoadBMP_RW 통화에서 빈 표면은, 어쩌면 적절한 BMP 헤더를 포함해야 배열 등 사람이 그게 문제인지 지적 할 수거야? 다른 방법으로 이것을로드 할 수 있습니까?

답변

2

이것이 작동하지 않는 이유는 데이터가 비트 맵을 나타내지 않았기 때문입니다. 원시 픽셀 데이터입니다. 원시 비트 맵이 어떤 모양인지보고 싶다면 페인트로 하나 만들고 헥스 편집기에서 열면 헤더와 실제 픽셀 데이터가 표시됩니다.

나는 원시 데이터를 취하거나 (이 테스트 목적만을위한 것입니다 경우) 픽셀의 각각의 모든에 대한 putpixel 전화를 단순히 원하는 치수를 사용하여 SDL_Surface을 만드는 조언 다음 중 하나 this page에서 픽셀의 액세스 방법을 수정하는 것 .

몇 가지 요인에 따라 당신의 모든 픽셀 메모리의 값의 연속 배열되지 않습니다, 당신은 (픽셀 당 바이트) 계정에 SDL_Surfacepitchbpp에 응시해야합니다. 귀하의 경우에는 8 비트 (1 바이트) 픽셀이라고 가정합니다. 이 경우 pixels 행 단위로 데이터를 채우고 매번 pitch의 행 포인터를 이동하는 것이 매우 쉽습니다.

this document도 재미있을 것입니다.

+0

피치 포인트는 무엇입니까? 왜 피치가 이미지의 너비와 다를 것인가? SSE/AVX를 사용하면 폭이 4 또는 8의 배수가되므로 피치와 폭이 다를 수 있다는 것을 알고 있습니다. 그러나 이것이 제가 알고있는 유일한 예입니다. 더 일반적인 예가 있는지 궁금합니다. –

+0

이 스레드는 음조에 대한 설명이 많습니다. http://forums.libsdl.org/viewtopic.php?t=4544&sid=dd7f398958ed1ddd4cbbae9a903bcd5b – emartel

+0

고마워요! 그것은 내가 찾고있는 토론 유형과 정확히 같습니다. –

관련 문제