[c++ Builder] FillRect (GDI) 경계.

빵욱·2025년 8월 12일

C++Builder with VCL

목록 보기
6/6

TImage canvas에 이미지를 그릴 때 FillRect를 사용할 때 오른쪽/아랫쪽 경계는 배타적이라고 한다(Exclusive).

배타적인게 무슨 뜻이냐?
->
GDI(WinAPI)에서 사각형 RECT{Left, Top, Right, Bottom}은 좌표 개념은 아래와 같다고 한다.

  • X좌표 : Left <= X < Right
  • Y좌표 : Top <= y Bottom

즉, 왼쪽(Left)과 위쪽(Top) 경계는 포함되지만,
오른쪽(Right)과 아래쪽(Bottom) 경계는 포함되지 않는다고 한다.
그리고 이것을 배타적이라고 표현하더라..

이것은 Rect를 그릴 때 중요한 개념인데,

실제로 채워지는 픽셀의 개수(폭/높이)가
width = Right - Left
height = Bottom - Top
가 되기 때문이다.

예를 들어
Left=100, Top=50, Right=110, Bottom=70 일 때

포함되는 픽셀 좌표는

  • x: 100,101,…,109 (110은 불포함)
  • y: 50,51,…,69 (70은 불포함)
    그래서 실제로 채워지는 크기는 가로 10(110-100), 세로 20(70-50)이 된다.

1×1 픽셀만 채우고 싶다면

Left = x
Top  = y
Right  = x + 1
Bottom = y + 1

처럼 Right/Bottom을 +1 해줘야 한 칸을 그릴 수 있다.

왜 이렇게 사용하는지 찾아보니
'서로 맞닿은 사각형들을 그릴 때 경계 픽셀을 중복으로 칠하지 않도록 하려는 전통적 규칙' 이라고 한다.
오른쪽/아랫쪽을 배타로 두면, 인접한 사각형들이 딱 맞닿아도 겹치지 않는다.

  • 요약
    • Left/Top은 포함, Right/Bottom은 불포함.
    • 폭/높이는 Right-Left, Bottom-Top.
    • 한 픽셀을 채우려면 Right=Left+1, Bottom=Top+1.
profile
rove drink eat

0개의 댓글