C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[21481] Re:Re:정말 감사합니다.
처버 개발자 [] 885 읽음    2002-09-16 15:11
이렇게 친절한 답변은 기대하질 않았는데..
정말 감사드립니다.






방태윤 님이 쓰신 글 :
: 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)로 구현하기가 불가능 한 것인지.
: : 혹은 다른 좋은 방법이 있으면 가르쳐 주셨으면 고맙겠습니다.
: :
: : 그리고 저같은 경우는 지도를 확대/축소하면 동심원의 크기도 확대/축소를 해야되기 때문에
: : 아예 비트맵을 만들어 놔서 투명하게 뿌리는 방법은 사용하지 않았습니다.
: :
: :
: :
: :

+ -

관련 글 리스트
30655         Re:Re:[질문]페널 위에 반투명 효과를 넣은 여러개의 동심원을 그리려면 어떻게 해야 합니까? Emmortal.초짜 1014 2002/09/16
21481         Re:Re:정말 감사합니다. 처버 개발자 885 2002/09/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.