GDI 와 기능적으로 같지만 50가지가 넘는 다양한 패턴을 제공하며, 그라데이션 채우기도 가능하다. 다음은 청색의 단색 브러시를 만들어서 도형을 채우는 예이며 주의할 점은 도형을 채우는 함수는 그리는 함수와 다르다는 것이다.

void CGdiPlusDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
Graphics graphics(dc);
graphics.SetSmoothingMode(SmoothingModeAntiAlias);

//SolidBrush 클래스는 단색 브러시를 객체화한 클래스이다.
SolidBrush solidbrush(Color(255,0,0,255));
//다음은 FillXXX() 로 되어있는데 이는 앞서 배운 DrawXXX() 메서드에 대응한다.
graphics.FillRectangle(&solidbrush, 20,20,100,100);
graphics.FillEllipse(&solidbrush, 150,20, 100,100);
graphics.FillPie(&solidbrush, 300,20,100,100,180.0f, 90.0f);
//graphics.FillClosedCurve(&solidbrush,pts,6,FillModeAlternate);
}




빗살 무늬 브러쉬

다음 코드는 빗살 무늬 브러쉬로 어떤 것이 있는지 나열한 예이다.

void CGdiPlusDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
Graphics graphics(dc);
graphics.SetSmoothingMode(SmoothingModeAntiAlias);

int nStyle = HatchStyleHorizontal;
int nCounter = 0;

for(int y=0; y<6; ++y)
{
for(int x=0; x<10; ++x)
{

HatchBrush hatchbrush(
(HatchStyle)(nStyle+nCounter), //HatchStyle 열거형
Color::Black, //전경색
Color::Transparent); //배경색

graphics.FillRectangle(&hatchbrush,
x*50+20, //x좌표
y*40+20, //y좌표
40,30); //너비 및 높이
nCounter++;
if(nCounter >= HatchStyleMax) break;

}
}



그라데이션 브러시

그라데이션 브러시를 활용하면 CDC 클래스의 GradientFill() 메서드를 이용하는 코드를 대체할 수 있으며 영역을 칠하는 개념이 아닌 브러시로 객체화됨으로써 그라데이션 채우기를 적용하는 범위가 매우 다양해졌다. 다음은 그라데이션 브러시를 생성하여 도형을 채우는 예제다.

void CGdiPlusDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
Graphics graphics(dc);
graphics.SetSmoothingMode(SmoothingModeAntiAlias);

dc.TextOut(25,25,_T("Gdi+ gradient test string"));

LinearGradientBrush lgBrush(
Point(0,0), //0,0좌표에서
Point(100,100), //100,100 좌표를 향해 그라데이션 채우기를 적용하라.
Color(128,221,236,255),
Color(255,86,125,204)
);
// 즉 두 좌표가 만든 선과 수직인 선을 기준으로 기울기가 결정한다.


//LinearGradientBrush lgBrush(
// Rect(10,10,200,200),
// Color(128,221,236,255),
// Color(255,86,125,204),
// LinearGradientModeVertical //수직으로 주자.
// );

//다음이 직접 각도를 명시하는 직관적인 코딩이다.
//LinearGradientBrush lgBrush(
// Rect(10,10,200,200),
// Color(128,221,236,255),
// Color(255,86,125,204),
// 90.0f, FALSE // 직접 각도를 45도로 주자.
// );

graphics.FillRectangle(&lgBrush, 0,0,600,200);


}



텍스처(Texture) 브러쉬

비트맵 패턴 브러시를 만드는 것은 GDI 에서도 가능했으며, 단순히 바둑판 형식으로 배열하는 것만 지원했었다. 그리고 JPG나 GIF 파일을 로드하여 브러시로 만드는 것에도 복잡한 과정이 필요했으나 GDI+ 에서는 Image 클래스를 활용하여 다양한 이미지 리소스를 활용하도록 지원이 된다. 또한 TextureBrush 클래스를 제공하여 이미지의 배열 규칙의 다양성을 확대하고 있다. 다음 코드는 뷰 윈도우의 클라이언트 영역을 칠하는 예이며, 화면을 둘로 나누어 왼쪽은 GDI처럼 바둑판식으로, 오른쪽은 이미지 배열 모드를 변경하여 수평/수직으로 뒤바뀐 패턴으로 배열한다.

void CGdiPlusDemoView::OnPaint()
{
CPaintDC dc(this); // device context for painting
Graphics graphics(dc);
graphics.SetSmoothingMode(SmoothingModeAntiAlias);

Image Image(_T("Texture.jpg"));
TextureBrush txBrush(&Image, WrapModeTile);

CRect rectClient;
GetClientRect(&rectClient);
graphics.FillRectangle(&txBrush,0,0,rectClient.Width()/2, rectClient.Height());

txBrush.SetWrapMode(WrapModeTileFlipXY); //FlipX는 좌우를 뒤집어서 출력하라. FlipY는 상하를 뒤집어라.
graphics.FillRectangle(&txBrush,rectClient.Width()/2, 0, rectClient.Width()/2, rectClient.Height());


}






+ Recent posts