|
사물의 배경을 투명으로 하고자 할 때...
1 사물이 있는 부분은 어떤 색이 들어가든 상관없고 나머지부분은 흰색으로 된 이미지를 하나 만듭니다.
2 그리고 사물이 있는 부분은 흰색이고 나머지부분이 검은색으로 되어 있든 그림을 준비합니다.
이것을 마스크라고 합니다.
3 배경으로 사용할 그림을 하나 띄웁니다.
Graphics::TBitmap* bg_bmp = new Graphics::TBitmap;
bg_bmp->LoadFromFile("./back.bmp");
TRect src_rt(0,0,bg_bmp->Width,bg_bmp->Height), tgt_rt(0,0,bg_bmp->Width,bg_bmp->Height);
Canvas->CopyMode = cmSrcCopy;
Canvas->CopyRect(src_rt, bg_bmp->Canvas, tgt_rt);
delete bg_bmp;
4 다음 마스크그림을 배경위에 OR 모드로 그립니다.
Graphics::TBitmap* mask_bmp = new Graphics::TBitmap;
mask_bmp->LoadFromFile("./imagemask.bmp");
TRect src_rt(100,100,mask_bmp->Width+100,mask_bmp->Height+100),
tgt_rt(0,0,mask_bmp->Width,mask_bmp->Height);
Canvas->CopyMode = cmSrcPaint;
Canvas->CopyRect(src_rt, mask_bmp->Canvas, tgt_rt);
delete mask_bmp;
5 마지막으로 스프라이트를 AND 모드로 마스크와 같은 위치에 그립니다.
Graphics::TBitmap* sprite_bmp = new Graphics::TBitmap;
sprite_bmp->LoadFromFile("./image.bmp");
TRect src_rt(100,100,sprite_bmp->Width+100,sprite_bmp->Height+100),
tgt_rt(0,0,sprite_bmp->Width,sprite_bmp->Height);
Canvas->CopyMode = cmSrcAnd;
Canvas->CopyRect(src_rt, sprite_bmp->Canvas, tgt_rt);
delete sprite_bmp;
신현준 님이 쓰신 글 :
: 우선.. 단순한 다각형의 경우 특정 색에 대해 투명하게 설정을 할 수 는 있었습니다.
:
: Picture의 Transparent속성을 True로 해주고 일정 색을 투명 처리하기 위하여
:
: Image1->Canvas->BrushCopy(.......);를 사용하였습니다..
:
: 헌데.. 문제는... 좀더 복잡하게 되었습니다..
:
: 혹.. 포토샵과 같은 이미지 프로세싱 프로그램을 써보셨는지요..
:
: 만약 원이 있다면 그림자 효과등을 준다든지.. 또는.. Antialiasing등의 기등등으로 완전한 색 구분이 힘들어지게 되는 경우가 많이 있습니다...
:
: 또한 단적으로 포토샵등에서 폰트를 넣게 되면 이것을 이미지화 시킬경우 Antialiasing기능이 들어가 이 이미지를 배경은 흰색으로 하여 투명하게 할경우 이미지 컴포넌트 뒤에 짙은색이 있을경우 너무도 티가 확 나더군요.. ㅡㅡ;;
:
: 제가 너무 큰걸 생각하고 있는지는 모르겠습니다만...
:
: 이런.. 그림자 효과나 Antialiasing등의 기능으로 인한 완벽하게 이미지가 짤리지 않는 것들은 어케 해결이 되지 않을런지요...
:
: 저의 낮은 소견으로는... 가장 사용하지 않는 색(예를 들어 Red)을 배경으로 주고 이 색의 알파값을 낮추게 되면 이 색만 알파값이 줄어드는 그런 방식이 되지 않을까 합니다.. 이럴경우 그림자 효과에 들어가는 빨간 색의 알파값도 내려가지 앟을러지..
:
: 아... 이렇게 하면 다른 색의 Red또한 알파값이 낮아져 다른색을 나타내게 되는건가요?
:
: 아.. 난해 하네요.. ㅡㅡ;;
:
: 고수님들의 도움 부탁드리겠습니다..
:
:
: 참고로 그림파일 하나 올리도록 하겠습니다...
|