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
[21476] Re:[질문]페널 위에 반투명 효과를 넣은 여러개의 동심원을 그리려면 어떻게 해야 합니까?
방태윤 [nabty] 1620 읽음    2002-09-16 14:10
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)로 구현하기가 불가능 한 것인지.
: 혹은 다른 좋은 방법이 있으면 가르쳐 주셨으면 고맙겠습니다.
:
: 그리고 저같은 경우는 지도를 확대/축소하면 동심원의 크기도 확대/축소를 해야되기 때문에
: 아예 비트맵을 만들어 놔서 투명하게 뿌리는 방법은 사용하지 않았습니다.
:
:
:
:

+ -

관련 글 리스트
21474 [질문]페널 위에 반투명 효과를 넣은 여러개의 동심원을 그리려면 어떻게 해야 합니까? 처버 개발자 729 2002/09/16
21476     Re:[질문]페널 위에 반투명 효과를 넣은 여러개의 동심원을 그리려면 어떻게 해야 합니까? 방태윤 1620 2002/09/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.