Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Последовательность выполнения. Задание для самостоятельной работы




Задание для самостоятельной работы

Возвращаемое значение

Параметры

Возвращаемое значение

Параметры

dx

[in] Вещественное число, которое задаёт горизонтальную компоненту преобразования.

dy

[in] Вещественное число, которое задаёт вертикальную компоненту преобразования.

order

[in] Необязательный. Элемент перечисляемого типа MatrixOrder, который определяет порядок произведения матриц преобразования. Значение MatrixOrderPrepend означает, что матрица преобразования располагается слева, а MatrixOrderAppend означает, что матрица преобразования располагается справа. Значение по умолчанию MatrixOrderPrepend.

В случае успеха возвращает значение Ok, которое является элементом перечисления Status.

В случае ошибки возвращает одно из значений перечисления Status.

 

 

Метод ScaleTransform изменяет матрицу преобразования данного графического объекта путём произведения самой себя на матрицу масштабирования.

 

sx

[in] Вещественное число, которое задаёт горизонтальный коэффициент масштабирования в матрице масштабирования.

sy

[in] Вещественное число, которое задаёт вертикальный коэффициент масштабирования в матрице масштабирования.

order

[in] Необязательный. Элемент перечисляемого типа MatrixOrder, который определяет порядок произведения матриц преобразования. Значение MatrixOrderPrepend означает, что матрица преобразования располагается слева, а MatrixOrderAppend означает, что матрица преобразования располагается справа. Значение по умолчанию MatrixOrderPrepend

В случае успеха возвращает значение Ok, которое является элементом перечисления Status.

В случае ошибки возвращает одно из значений перечисления Status.

 

Цель. Преобразование цветовых компонентов между RGB и HSV. Двумерная визуализация пространства HSV. Масштабирование средствами GDI+.

Задание. Разработать Win32 приложение, демонстрирующее представление цветовой модели HSV в виде круговой диаграммы. При перемещении указателя мыши с нажатой левой клавишей выводить параметры текущей цветовой точки в форматах RGB и HSV. При нажатии клавиш «+», «–» производить масштабирование изображения.

 

Примечание:

Клавиша «+» на дополнительной клавиатуре имеет код 0x6b

Клавиша «–» на дополнительной клавиатуре имеет код 0x6d

Клавиша «Enter» как на основной так и на дополнительной клавиатуре имеет код 0x13

 

1. Создать проект Win32 с именем «Lab3»

2. Подключить GDI+

3. Создать обработчик события WM_PAINT

• объявить прототип глобальной функции OnPaint следующего вида:

void OnPaint(HWND hwnd, HDC hdc);

 

• описать реализацию функции OnPaint с пустым телом

• В функции WndProc добавить обработчик сообщения WM_PAINT

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

OnPaint(hWnd, hdc);

EndPaint(hWnd, &ps);

break;

 

4. Создать функцию построения графического изображения

• Объявить глобальную переменную. Она будет содержать построенную цветовую модель

Bitmap *bitmap = NULL;

 

• Объявить прототип глобальной функции для построения цветовой модели:

void BuildBitmap(Bitmap *bmp, const int Radius);

 

• Описать реализацию функции BuildBitmap. Ниже в качестве примера приведён вывод точки

bmp->SetPixel(0, 0, Color(255, 0, 0));

 

• В функции _tWinMain, после MyRegisterClass добавить вызов созданной функции BuildBitmap

const int Radius = 150;

bitmap = new Bitmap(2*Radius, 2*Radius);

BuildBitmap(bitmap, Radius);

 

• Перед выходом из функции _tWinMain освободить память, выделенную для глобальной переменной.

delete Bitmap;

 

5. Описать реализацию функции OnPaint следующего вида:

 

void OnPaint(HWND hwnd, HDC hdc)

{

if (bitmap == NULL) return;

// Создаем контекст рисования и устанавливаем пиксельную систему координат

Graphics g(hwnd);

g.SetPageUnit(UnitPixel);

RECT rc;

GetClientRect(hwnd, &rc);

// Смещаем систему координат в центр области рисования главного окна

g.TranslateTransform((double)rc.right/2.0, (rc.bottom - (double)rc.top)/2.0);

// Вывод построенного изображения bitmap на экран

Pen pen(Color(0,0,255));

g.DrawImage(bitmap, Point(-(int)bitmap->GetWidth()/2, -(int)bitmap->GetHeight()/2));

// Крестик в центре изображения (для удобства разработки)

g.DrawLine(&Pen(Color(0, 0, 0), 2.0f), -40, 0, 40, 0);

g.DrawLine(&Pen(Color(0, 0, 0), 2.0f), 0, -40, 0, 40);

}

 

6. Построить цветовую модель HSV в обработчике BuildBitmap

7. Создать обработчик сообщения WM_MOUSEMOVE (см. пример «60 SpyTheMouse»)

8. Выводить параметры текущей цветовой точки в заголовок окна приложения

9. Создать обработчик сообщения WM_KEYDOWN для обработки нажатия клавиш «+», «–»

10. Скорректировать обработчик сообщения WM_PAINT так, чтобы построение изображения производилось в зависимости от коэффициента масштаба

 

 




Поделиться с друзьями:


Дата добавления: 2014-12-07; Просмотров: 338; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.