|
이렇게 친절한 답변은 기대하질 않았는데..
정말 감사드립니다.
방태윤 님이 쓰신 글 :
: rgn 함수로 따로 따로 처리해 주시면 될듯합니다만...
:
: 아래는 rgn 사용법..^^
: HRGN dest=CreateEllipticRgn(1,1,1,1);
: HRGN a=CreateEllipticRgn(200,200,500,500);
: HRGN b=CreateEllipticRgn(250,250,450,450);
: HRGN c=CreateEllipticRgn(300,300,400,400);
:
: CombineRgn(dest,a,b,RGN_XOR);
: SelectObject(Canvas->Handle,dest);
: Canvas->Ellipse(200,200,500,500);
:
: CombineRgn(dest,b,c,RGN_XOR);
: SelectObject(Canvas->Handle,dest);
: Canvas->Brush->Color=clBlue;
: Canvas->Ellipse(250,250,450,450);
:
: DeleteObject(a);
: DeleteObject(b);
: DeleteObject(c);
: DeleteObject(dest);
:
: 제 의견을 말씀드린다면 AlphaBlend를 사용하시면 어떨지요?
: : 아예 비트맵을 만들어 놔서 투명하게 뿌리는 방법은 사용하지 않았습니다.
: 라고 말씀하시지만 버퍼를 마련해서 그곳에 동심원을 그리고 그걸 사용하면 될것 같습니다.
:
: 아래는 테스트
:
: #include "Wingdi.h"
:
: Graphics::TBitmap*pp=new Graphics::TBitmap();
: pp->LoadFromFile("c:\\a.bmp");
: Canvas->Draw(0,0,pp);
:
: int x,y,w,h;
: x=0,y=0,w=250,h=250;
: Graphics::TBitmap*p=new Graphics::TBitmap();
: p->Width=w;
: p->Height=h;
: BitBlt(p->Canvas->Handle,0,0,w,h,Canvas->Handle,x,y,cmSrcCopy);
:
: p->Canvas->Brush->Color=clRed;
: p->Canvas->Ellipse(0,0,w,h);
: p->Canvas->Brush->Color=clBlue;
: p->Canvas->Ellipse(50,50,w-50,h-50);
:
: BLENDFUNCTION bf;
: bf.BlendOp=AC_SRC_OVER;
: bf.BlendFlags=0;
: bf.SourceConstantAlpha=0;
: bf.AlphaFormat=0;
: bf.SourceConstantAlpha=128;
: AlphaBlend(Canvas->Handle,x,y,w,h,p->Canvas->Handle,0,0,w,h,bf);
:
: delete p;
:
: AlphaBlend 사용하시려면 프로젝트에 \CBuilder5\Lib\PSDK\Msimg32.lib를 추가하셔야합니다.
:
: 처버 개발자 님이 쓰신 글 :
: : 제가 하려는 것은 패널 상에 지도를 보여 준다음에
: : 어떤 점을 클릭하면 그점을 중심으로 일정 거리단위로 다른 색깔의 동심원을 그려주려고 합니다.
: :
: : 그래서 일단 색깔마다 점을 드문드문 찍은 비트맵을 만들어서
: : 그 비트맵으로 사용자 정의 브러쉬를 만들었습니다.(붉은 색 / 파란 색)
: : 하나의 원을 그릴때는 성공적으로 반투명 효과가 나면서 그려지는데
: :
: : 두개이상의 동심원을 그리면 색이 합쳐져서
: : 0-10km는 파란색
: : 10-20km는 붉은색 이렇게 나와야 하는데
: :
: : 0-10km 보라색
: : 10-20km는 붉은색 이렇게 나오는 군요.
: :
: : 그래서 밖의 원(붉은 색)을 먼저 그리고
: : 안의 원을 검정색RGB(0,0,0)으로 그린다음에
: : 그곳에다 파란색원을 OR연산으로 그리니까 색깔은 나오는데 반투명 효과가 사라지더군요.
: :
: : 원래 브러쉬와 Raster Operation(SetRop)로 구현하기가 불가능 한 것인지.
: : 혹은 다른 좋은 방법이 있으면 가르쳐 주셨으면 고맙겠습니다.
: :
: : 그리고 저같은 경우는 지도를 확대/축소하면 동심원의 크기도 확대/축소를 해야되기 때문에
: : 아예 비트맵을 만들어 놔서 투명하게 뿌리는 방법은 사용하지 않았습니다.
: :
: :
: :
: :
|