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
[21041] Re: 두가지 방법이 있겠군요
김상구.패패루 [peperu] 816 읽음    2002-08-27 14:24
RGN을 사용하는 방법과 Pixel을 사용하는 방법이 있습니다.
API에 보시면 CreateRectRGN 이었던가.. 뭐 비스무리한 함수들이 많이 있습니다.
보통은 타원, 원의 영역을 표현하는데 많이 쓰지만 폴리건에도 적용이 가능하답
니다. 폴리건의 형상이 컨벡스이건 그렇지 않건 상관없죠.
그러한 함수들을 쓰시면 영역검사가 확실하게 됩니다.
그렇지만 문제가 있죠. 원본 소스가 비트맵인 경우 리전 자체를 생성하는 것이
쉽지 않습니다. 여러가지 알고리즘이 이미 공개되어 있긴 하지만 귀찮기 짝이없
는 것은 분명하죠.

보다 쉽게 간다면 비트맵을 투명하게 처리할 때 사용했던 배경색이 있을겁니다.
물론 32bit비트맵으로 처리한 경우라면 배경색이 없을 수도 있지만(왜냐, 알파
값으로 처리할 수 있으니까요) 아무튼, 그런 방식을 쓰셨을 가능성은 거의 없다
고 보고, 마우스의 좌표값을 비트맵 영역에 매핑한 후 Canvas의 Pixel함수로
현재 마우스가 가리키고 있는 부분의 칼라값을 얻어냅니다. 만약 배경색이면
처리하지 않으면 되겠죠. 물론 ScanLine으로 처리하셔도 좋습니다. 조금 더 복
잡하긴 하겠지만 속도는 보다 빠릅니다.

잘 될겁니다. 틀림없이.


김진섭 님이 쓰신 글 :
: 제목이 좀 애매하게 되었네요..
:
: 간단하게 설명을 드리자면,
: 흰색 바탕에 파란색 원이 가운데 그려져 있는 비트맵이 있는데,
: 흰색 바탕을 transparent시켜서 파란색 원만 보이게 했습니다.
: 이걸 마우스로 이리저리 끌고다니고 싶은데,
: 문제는 마우스 이벤트가 잡히는 영역이 파란색 원이 아니라
: 투명처리된 사각형 전체라는 거죠.. 원 바깥쪽을 잡고 끌어도
: 비트맵 위라면 원이 움직인다는 겁니다.
:
: 원 내부에 포인터가 위치했는지를 수학적으로 계산해서 하십쇼.... 와 같은
: 답변은 소용없습니다... 이게 원이 될 수도 있고 사람 얼굴이 될 수도 있으니까요.. -_-;;
:
: transparent된 영역에서는 마우스 이벤트가 잡히지 않게 할 수 있을까요?
:

+ -

관련 글 리스트
21040 [질문] 투명처리된 비트맵에서 마우스 이벤트 잡아내기 김진섭 704 2002/08/27
21041     Re: 두가지 방법이 있겠군요 김상구.패패루 816 2002/08/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.