API-색상,펜,브러시

1.색상

윈도우즈 에서는 색상값을 표현하기 위해 COLORREF 라는 데이터형을 사용한다.

 

typedef DWORD COLORREF;

 

COLORREF 형은 부호없는 32비트 크기의 정수형

8비트씩 빨간색 , 초록색 , 파란색의 농도를 나타내며 상위 8비트는 사용되지 않는다.

각 색상 요소는 1바이트( 8비트 )의 크기를 가지므로 , 0~255 까지의 농도를 표현할 수 있으며 이 색상요소의 혼합에 의해 색상 하나가 만들어 진다.

 

COLORREF 형은 32비트 정수일 뿐이므로 16진수로 직접 표현할 수 있다.

예를 들어 0은 검정색 이 되며 0xff0000 는 빨간색 , 0x0000ff 는 파란색 이 된다.

하지만 , 통상 RGB 매크로 함수를 사용한다.

 

#define RGB(r,g,b) ((COLORREF)(((BYTE)(r) | ((WORD)((BYTE)(g))<<8 | (((DWORD)(BYTE)(b))<<16)))

 

색상값을 만들 때는 통상 RGB 매크로 함수를 사용한다.

이는 각각  [ 빨간,초록,파란색 ] 의 농도이며 이 세 값을 조립하여 
 
하나의 32비트 색상값을 만들어 내는 간단한 비트 연산을 한다.

 


2. 펜

펜은 선을 그을 때 사용되는 GDI 오브젝트 이다.

펜을 변경하면 그려지는 선의 모양을 마음대로 변경할 수 있다.

그런데 , 윈도우즈가 제공하는 스톡 펜은 ( 흰색 , 검정색 , 투명색 ) 세 가지 뿐이며 파란색 , 노란색 등의 원색 펜은 없다.

이런 펜을 사용하고자 할 때는 직접 만들어서 사용해야 한다.

펜을 만드는 함수는 다음과 같다.

 

HPEN CreatePen( int fnPenStyle , int nWidth , COLORREF crColor );

// 무슨펜? , 굵기 , 색깔

 

[1] fnPenStyle

그려질 선의 모양을 지정한다.

이 값을 변경하면 [ 실선 , 점선 , 일점 , 쇄선 ] 등등의 선모양 등으로 변할 수 있다.

단 , 선의 모양은 굵기가 1 일때만 효과가 있으며 굵기가 2 이상이면 무조건 실선으로 그려진다.

즉 , 굵은 점선은 그릴 수 없다.

 

펜의 종류 : PS_SOLID , PS_DASH, PS_DOT, PS_PS_DASHDOT , PS_DASHDOTDOT

 

[2] nWidth

선의 굵기를 지정한다.

디폴트 선의 굵기는 1이다.

이 값이 0 일 경우는 맵핑모드에 상관없이 무조건 1픽셀 두께의 선이 만들어 진다.

 

[3] crColor

선의 색상을 지정한다.

COLORREF 형이므로 RGB 매크로 함수를 사용하면 된다.

예를 들어 파란색 펜을 만들고 싶으면 RGB(0 ,0 ,255) 색상을 지정한다.

 

[리턴값]

새로 만든 펜의 핸들이 리턴되는데 이 값을 잘 보관해 두어야 만들어진 펜을 사용할 수 있으며

다 사용한 후 파괴할 수도 있다.

 

 



3. 브러시
 
브러시는 채워지는 면을 채색하는 용도로 사용되는데 말 그대로 붓을 의미한다.

사각형의 안쪽이나 원의 내부 , 또는 다각형의 내부를 채색할 때 현재 DC 에 선택된 브러시가 사용된다.

스톡 브러시에는 회색 , 흰색 , 검정색 등의 단색 브러시가 있으므로 이 브러시들은 별도로 만들지 않아도 사용할 수 있다.

이 외의 브러시는 직접 만들어 사용해야 한다.

만드는 함수만 다를 뿐 사용 방법은 앞에서 살펴본 펜과 동일하므로 어렵지 않다.

 

브러시를 만드는 함수는 다음과 같다.

 

HBRUSH CreateSolidBrush ( COLORREF crColor );

HBRUSH CreateHatchBrush ( int fnStyle , COLORREF clrref );

 

첫 번째 함수는 단색의 브러시만을 만들 수 있으며 브러시의 색상만 인수로 전달한다.

두 번째 함수는 색상 뿐만 아니라 무늬도 같이 지정할 수 있다. 지정할 수 있는 무늬는 다음과 같다.

 

 값  설명 
 HS_BDIAGONAL  좌하향 줄무늬 
 HS_CROSS  바둑판 모양
 HS_DIAGCROSS  좌하양 및 우 하향 줄무늬
 HS_FDIAGONAL  우하양 줄무늬
 HS_HORIZONTAL  수평선
 HS_VERTICAL  수직선


두 함수 모두 리턴하는 값은 만들어진 브러시의 핸들이다.

 

네모를 그려주면서 HatchBrush를 통해 만든 브러시 적용



4. NULL_BRUSH, NULL_PEN
 

 
스톡 오브젝트 도표를 보면 
 
브러시와 펜은 투명색의 NULL_BRUSH ( HOLLOW_BRUSH ) 와 NULL_PEN 이라는 것이 있는데

이 오브젝트는 그리기를 하지 않는 오브젝트라는 뜻이다.

Rectangle 이나 Ellipse 처럼 테두리도 그리고 도형의 내부도 채색하는 함수들은 펜과 브러시를 동시에 사용하는데 이 중 하나를 그리고 싶지 않을 때는 오브젝트를 선택해 놓고 그리기를 하면 된다.

  

        [ 빨간펜 / 초록브러시 ]                 [ 빨간펜 / 널 브러시 ]                [ 널 펜 / 초록 브러시 ]

 

 

 


만약 펜과 브러시를 모두  투명 오브젝트를 사용한다면 아무것도 그려지지 않을 것이다.

 

GDI 의 그리기 함수들은 항상 선택된 오브젝트를 무조건 사용하도록 되어 있으며

테두리만 따로 그리는 함수 , 안만 채우는 함수가 별도로 제공되지 않는다.

 

그래서 둘 중 하나만 그리고 싶을 때는 그리고 싶지 않은 부분에 대해 투명 오브젝트를 선택해 놓고 그려야 한다.




 

이 글을 공유하기

댓글

Designed by JB FACTORY