|
1. Overlay 영상 위에 그리실때는 Wincontrol 형태로 작업하는게 부적합합니다.
영상의 Render를 수행할 함수 안에서 Overlay Surface 위에 직접 그려주는 형태로 구현하면 되겠습니다만,
일반적인 메시징을 타시기 힘드실테고, Draw쪽과 Mouse Event등 이것 저것을 직접 다시 구현해야 될겁니다.
만약 카메라로 부터 얻어온 영상을 Window 위에 직접 그리시는 경우엔 상관이없겠지요.
2. 위의 문제와 상관없이, 획득한 영상을 직접 Window Control위에 그리신다면,
배경 스크린 윈도우 위에 테두리나 내용을 반투명 처리하여 그려야 할 필요가 있을터이므로
TGraphicControl 정도로 무난합니다.
3. 이 경우 트래커의 그립 부분과 그 외의 부분의 마우스 클릭을 판단하는 효과적인 방법은
원의 경우, 원의 중심으로 부터 마우스 커서가 반지름 보다 가까운지 먼지 판단하는 것이고,
(피타고라스의 정리)
혹은, 원이든 다각형이든 모두 Polygon 으로 만들어 그린 다음 폴리곤의 내부가 클릭되었는지
판단하는 방법이 되겠지요.
bool __fastcall isPointInPolygon(TPoint *Points, TPoint P, int N){
TPoint P1, P2;
bool Result = false;
P1 = Points[0];
P2 = Points[N - 1];
for(int i = 1; i <= N; i++){
Result ^= (((P.y >= P1.y) ^ (P.y >= P2.y)) && (P.x - P1.x < MulDiv(P2.x - P1.x, P.y - P1.y, P2.y - P1.y)));
P2 = P1;
P1 = Points[i % N];
}
return Result;
}
이 함수를 쓰시면, TPoint의 배열(Points)과, 그 갯수(N)로 넘긴 폴리곤의 내부에 마우스 좌표(P)가
있는지 판단할 수 있습니다.
4. 위와 같이 구현하였는데, 트래커를 그리는 과정에서 깜박인다. (물론 깜박이겠죠)
그럴 경우엔 트래커를 올려 놓은 배경스크린 컨트롤의 DoubleBuffered = true; 로 설정하시면 OK.
|