2012-04-22 2 views
0

내가 여기에 투명한 SDL_Surface를 (그 위에 반투명 사각형 블럭 전송하기 위해) 얻으려고 노력하고있어 내가 무슨 짓을했는지의 :투명한 SDL_Surface를 얻는 방법?

surface := SDL_CreateRGBSurface(SDL_SWSURFACE, XMAX*TILE_SIZE, 
YMAX*TILE_SIZE, BPP, 0, 0, 0, SDL_ALPHA_TRANSPARENT); 
SDL_FillRect(surface, nil, SDL_MapRGBA(surface^.format, 0, 0, 0, 0)); 

이 여전히 작동하지, 내가 할 표면이 대신 검은 색 투명합니다. 어떤 생각?

보너스 : 여러 개의 반투명 직사각형이 서로 겹치지 않게하려면이 직사각형을 제거하고 새로운 배경을 블리치 할 수있는 방법이 있습니까?

답변

0

docs for SDL_CreateRGBSurface에서 보니 SDL_SWSURFACESDL_SRCALPHA으로 대체해야한다고 생각합니다.

그 옵션이 아니에요 당신은 일부 메모리 지출 할 경우 보너스의 경우, 당신은 하드웨어 가속 작업을 진행하는 첫번째 시도 ...하지만 수 있습니다 사각형을 그리기 전에,

  • 먼저 그 아래에있는 픽셀의 복사본을 만듭니다.

  • 맨 위의 사각형을 지우려면 저장된 배경 이미지를 다시 블 리팅하면됩니다.

  • 다른 직사각형을 지우려면 배경을 다시 블라이드 한 다음 직사각형의 겹치는 부분을 앞뒤로 다시 그립니다.

+0

MMH는 ...이 플래그가 (이 설명서에 빗대 것 같은) 투명한 표면을 가질 필요가 같다하더라도, 그것은 여전히 ​​내 문제가 해결되지 않습니다 /합니다. 사실, 그것은 아무것도 변경하지 않습니다 ... SDL_FillRect RGBA 픽셀 (및 255 다른 알파 값) 사용할 때 여전히 완전히 불투명하게 볼. "보너스"부분에 대해서는이 경우 내 배경이 아무 것도 아닐 수 있습니다. 더 정확하게 말하면 투명 픽셀입니다. 이미 블리 팅 된 서페이스 위에 투명 픽셀을 블릿팅하면 아무 것도 할 수 없는지 나는 알고 있습니까? – halflings

+0

기다리십시오. 곡면이 투명하게 보이길 원합니까? 아니면 창문이 투명 해 지길 원합니 까? 창이면 SDL 자체가 아니라 운영 체제와 대화해야합니다. Win32에서 [이 질문에] (http://stackoverflow.com/questions/3970066/creating-a-transparent-window-in-c-win32)을 참조하십시오 - 그것은 C++ 용이지만 델파이의 동일한 DLL과 대화 할 수 있습니다. .. 실제로 작동하려면 SDL 소스 코드를 파헤쳐 야 할 수도 있습니다. (어쩌면 시도해 본적이 없습니다.) – tangentstorm

+0

투명 픽셀을 블리 팅하는 이유는 무엇입니까? 먼저 블렌딩을 비활성화 한 다음 다시 활성화하십시오. 오버레이 스탬프를 찍습니다. (그리고 투명한 창 작업을 할 수 없다면, 운영 체제에 스크린 샷을 제공하고 거기에서 픽셀을 복사 해 줄 것을 요청할 수 있습니다. 투명 창이있는 유일한 방법이었습니다. Java. 자세한 내용은 [이전 기사] (http://onjava.com/onjava/excerpt/swinghks_hack41/index.html)를 참조하십시오. – tangentstorm

관련 문제