Міністерство освіти та науки України
Національний університет “Львівська політехніка”
УПРАВЛІННЯ КОЛЬОРАМИ ТА СТИЛЯМИ ГРАФІЧНИХ ЗОБРАЖЕНЬ В СЕРЕДОВИЩІ MICROSOFT VISUAL STUDIO C++ 2008
Лабораторна робота №3
з курсу «Програмування комп’ютерної графіки»
Варіант №18
Мета роботи:
Вивчити функції для управління кольорами та стилями графічних зображень; навчитися складати програми на алгоритмічній мові С++ для побудови різноманітних графічних зображень в середовищі MICROSOFT VISUAL STUDIO C++ 2008.
Завдання:
/
Блок-схема програми:
-
+
-
+
-
+
Список змінних, які використовуються в коді програми, та їх пояснення:
dc.MoveTo() – переносить курсор у задану точку;
dc.LineTo() – будує лінію до заданої точки;
CBrush br;
br.CreateSolidBrush(RGB(0,0,0));
dc.SelectObject(&br); - Створення та використання користувацького пера;
dc.FloodFill(x, y, Color); - замальовує область екрану поточним пензлем х,у – координати точки всередині замкнутої області; Color – колір межі до якої буде здійснюватися замалювання;
dc.SelectStockObject(Color); - перо , Color – колір пера;
dc.Rectangle() – малює прямокутник,
COLORREF – стандартний тип для представлення кольорів.
Остаточна версія програми:
// ChildView.cpp : реализация класса CChildView
//
#include "stdafx.h"
#include "ChildView.h"
#include <conio.h>
#include <vector>
#include<iostream>
#include <math.h>
#include <fstream>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CChildView
CChildView::CChildView()
{
}
CChildView::~CChildView()
{
}
BEGIN_MESSAGE_MAP(CChildView, CWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()
// обработчики сообщений CChildView
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CWnd::PreCreateWindow(cs))
return FALSE;
cs.dwExStyle |= WS_EX_CLIENTEDGE;
cs.style &= ~WS_BORDER;
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
::LoadCursor(NULL, IDC_ARROW), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), NULL);
return TRUE;
}
void CChildView::OnPaint()
{
CPaintDC dc(this);
CPoint pts[17];
COLORREF cBlack = RGB(0, 0, 0);
COLORREF cBlue = RGB(0, 230, 250);
COLORREF cBlue1 = RGB(0, 0, 250);
COLORREF cYellow = RGB(255, 255, 104);
CPen pBlack;
pBlack.CreatePen(PS_SOLID, 12, cBlack);
CPen pYellow;
pYellow.CreatePen(PS_SOLID, 12, cYellow);
CPen pYellow1;
pYellow1.CreatePen(PS_SOLID, 8, cYellow);
CPen pBlue1;
pBlue1.CreatePen(PS_SOLID, 10, cBlue1);
CBrush bBlue;
bBlue.CreateSolidBrush(cBlue);
CBrush bBlue1;
bBlue1.CreateSolidBrush(cBlue1);
CBrush bYellow;
bYellow.CreateSolidBrush(cYellow);
CBrush bBlack;
bBlack.CreateSolidBrush(cBlack);
dc.SelectObject(pBlue1);
dc.SelectObject(bBlue);
dc.Rectangle(5,5, 400,400);
dc.SelectStockObject(NULL_PEN);
dc.SelectObject(bBlue1);
pts[0].x = 25; pts[0].y = 25;
pts[1].x = 50; pts[1].y = 25;
pts[2].x = 50; pts[2].y = 75;
pts[3].x = 75; pts[3].y = 75;
pts[4].x = 75; pts[4].y = 85;
pts[5].x = 25; pts[5].y = 85;
dc.Polygon(pts,6);
pts[0].x = 85; pts[0].y = 25;
pts[1].x = 150; pts[1].y = 25;
pts[2].x = 150; pts[2].y = 35;
pts[3].x = 110; pts[3].y = 35;
pts[4].x = 110; pts[4].y = 50;
pts[5].x = 150; pts[5].y = 50;
pts[6].x = 150; pts[6].y = 60;
pts[7].x = 110; pts[7].y = 60;
pts[8].x = 110; pts[8].y = 75;
pts[9].x = 150; pts[9].y = 75;
pts[10].x = 150; pts[10].y = 85;
pts[11].x = 85; pts[11].y = 85;
dc.Polygon(pts,12);
for (int i = 0; i < 7; i++)
{
if (!(i % 2)){ dc.Rectangle(160 + 12*i,25, 172 + 12*i, 37);
dc.Rectangle(160 + 12*i,73, 172 + 12*i, 85); }
}
for (int i = 0; i < 5; i++)
{
if (!(i % 2)){ dc.Rectangle(172 + 12*i,37, 184 + 12*i, 49);
dc.Rectangle(172 + 12*i,61, 184 + 12*i, 73); }
}
for (int i = 0; i < 3; i++)
{
if (!(i % 2)){ dc.Rectangle(184 + 12*i,49, 196 + 12*i, 61); }
}
dc.Rectangle(260,25, 285,85);
pts[0].x = 85; pts[0].y = 25;
pts[1].x = 150; pts[1].y = 25;
pts[2].x = 150; pts[2].y = 35;
pts[3].x = 110; pts[3].y = 35;
pts[4].x = 110; pts[4].y = 50;
pts[5].x = 150; pts[5].y = 50;
pts[6].x = 150; pts[6].y = 60;
pts[7].x = 110; pts[7].y = 60;
pts[8].x = 110; pts[8].y = 75;
pts[9].x = 150; pts[9].y = 75;
pts[10].x = 150; pts[10].y = 85;
pts[11].x = 85; pts[11].y = 85;
dc.Polygon(pts,12);
pts[0].x = 375; pts[0].y = 25;
pts[1].x = 375; pts[1].y = 35;
pts[2].x = 335; pts[2].y = 35;
pts[3].x = 335; pts[3].y = 45;
pts[4].x = 352; pts[4].y = 50;
pts[5].x = 375; pts[5].y = 60;
pts[6].x = 375; pts[6].y = 75;
pts[7].x = 360; pts[7].y = 85;
pts[8].x = 300; pts[8].y = 85;
pts[9].x = 300; pts[9].y = 75;
pts[10].x = 333; pts[10].y = 75;
pts[11].x = 336; pts[11].y = 70;
pts[12].x = 333; pts[12].y = 60;
pts[13].x = 315; pts[13].y = 60;
pts[14].x = 300; pts[14].y = 50;
pts[15].x = 300; pts[15].y = 35;
pts[16].x = 310; pts[16].y = 25;
dc.Polygon(pts,17);
dc.SelectObject(bYellow);
pts[0].x = 22; pts[0].y = 300;
pts[1].x = 125; pts[1].y = 300;
pts[2].x = 80; pts[2].y = 335;
dc.Polygon(pts,3);
pts[0].x = 262; pts[0].y = 300;
pts[1].x = 365; pts[1].y = 300;
pts[2].x = 320; pts[2].y = 335;
dc.Polygon(pts,3);
dc.SelectObject(bBlack);
pts[0].x = 205; pts[0].y = 90;
pts[1].x = 225; pts[1].y = 102;
pts[2].x = 225; pts[2].y = 130;
pts[3].x = 205; pts[3].y = 150;
pts[4].x = 185; pts[4].y = 130;
pts[5].x = 185; pts[5].y = 102;
dc.Polygon(pts, 6);
dc.SelectObject(pBlack);
pts[0].x = 50; pts[0].y = 320;
pts[1].x = 70; pts[1].y = 338;
pts[2].x = 145; pts[2].y = 295;
pts[3].x = 80; pts[3].y = 162;
pts[4].x = 15; pts[4].y = 295;
pts[5].x = 137; pts[5].y = 295;
dc.Polyline(pts, 6);
pts[0].x = 290; pts[0].y = 320;
pts[1].x = 310; pts[1].y = 338;
pts[2].x = 385; pts[2].y = 295;
pts[3].x = 320; pts[3].y = 162;
pts[4].x = 255; pts[4].y = 295;
pts[5].x = 377; pts[5].y = 295;
dc.Polyline(pts, 6);
dc.SelectStockObject(NULL_PEN);
dc.SelectObject(bYellow);
pts[0].x = 200; pts[0].y = 310;
pts[1].x = 280; pts[1].y = 364;
pts[2].x = 117; pts[2].y = 373;
dc.Polygon(pts,3);
dc.SelectObject(pBlack);
pts[0].x = 125; pts[0].y = 370;
pts[1].x = 270; pts[1].y = 370;
pts[2].x = 273; pts[2].y = 355;
dc.Polyline(pts, 3);
pts[0].x = 152; pts[0].y = 345;
pts[1].x = 232; pts[1].y = 345;
pts[2].x = 235; pts[2].y = 330;
dc.Polyline(pts, 3);
pts[0].x = 177; pts[0].y = 320;
pts[1].x = 225; pts[1].y = 320;
pts[2].x = 204; pts[2].y = 320;
pts[3].x = 204; pts[3].y = 145;
dc.Polyline(pts, 4);
pts[0].x = 60; pts[0].y = 130;
pts[1].x = 331; pts[1].y = 130;
pts[2].x = 337; pts[2].y = 115;
dc.Polyline(pts, 3);
dc.MoveTo(80,100); dc.LineTo(80,293);
dc.MoveTo(320,100); dc.LineTo(320,293);
dc.SelectObject(pYellow);
dc.MoveTo(80,182); dc.LineTo(80,199);
dc.MoveTo(320,182); dc.LineTo(320,199);
dc.MoveTo(60,119); dc.LineTo(326,119);
dc.SelectObject(pYellow1);
pts[0].x = 187; pts[0].y = 140;
pts[1].x = 194; pts[1].y = 146;
pts[2].x = 194; pts[2].y = 311;
dc.Polyline(pts, 3);
}
Результат роботи програми:
/
Висновок:
На даній лабораторній роботі я вивчив основні функції управління кольорами та стилями графічних зображень.