47952 (597372)

Файл №597372 47952 (Основы графического вывода)47952 (597372)2016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла

Основы графического вывода

В предыдущих разделах мы вскользь касались темы, связанной с графическим выводом. При рассмотрении самого первого приложения (пример 1), были коротко отмечены основные правила работы с графическими устройствами, введено понятие контекст устройства (device context, DC), обсуждены некоторые основные правила работы с контекстом. При первом знакомстве мы ограничились только применением контекста устройства при обработке сообщения WM_PAINT.

Здесь еще раз будут повторены и несколько углублены рассмотренные вопросы, а также будет рассмотрено много новых, связанных с осуществлением вывода на графическое устройство. Здесь же будут рассмотрены некоторые вопросы осуществления вывода на принтер, не связанные с GDI непосредственно.

Контекст устройства

Повторим вкратце основные положения, сформулированные при первом знакомстве:

Все средства вывода в Windows относятся к графическому интерфейсу устройств (GDI). GDI представляет собой библиотеку функций для выполнения графического вывода на различных устройствах, не только на дисплее.

Все функции GDI взаимодействуют с контекстом устройства (device context, DC). Так что для осуществления вывода на устройство необходимо выполнить три основных шага:

получить хендл контекста этого устройства

осуществить собственно вывод на это устройство (рисование, вывод текста и пр.)

обязательно освободить контекст устройства.

Существует два способа получения хендла контекста устройства — создание и получение контекста устройства. Создаются достаточно специфичные контексты, например принтера. Такие контексты после использования необходимо уничтожать. Так как создание и уничтожение контекста занимает некоторое, хотя и незначительное время, и, кроме того, в большинстве случаев осуществляют вывод на дисплей, то этот процесс несколько ускорили: в системе заранее создается несколько контекстов, связанных с дисплеем. При выводе в окно или на дисплей новый контекст не создается, а получается из числа уже заготовленных системой. После использования такой контекст должен быть освобожден, а не уничтожен. Получение контекста осуществляется быстрее, чем его создание (так как в системе заранее создано некоторое количество таких контекстов) , но зато он должен быть получен и освобожден в процессе обработки одного сообщения — иначе все заготовленные контексты могут оказаться занятыми другими процессами или потоками, так что работа системы окажется нарушенной.

Контекст устройства описывает так называемые атрибуты контекста и непосредственно характеристики устройства.

Атрибуты контекста устройства независимы от самого устройства. Они характеризуют то изображение, которое будет рисоваться. В число атрибутов входят кисти, перья, шрифты, цвет текста, цвет фона и многое другое.

Информация об устройстве описывает непосредственно возможности самого графического устройства. Функции GDI взаимодействуют с устройством опосредованно — через контекст и через драйвер этого устройства. Для обеспечения универсальности средств вывода от драйверов требуется поддерживать некоторый базовый минимум операций. При необходимости выполнить более сложные операции GDI будет привлекать специальные программные расширения, являющиеся частью самого GDI. В случае использования устройств, способных аппаратно реализовывать дополнительные функции, GDI будет направлять запросы непосредственно драйверу этого устройства, а не использовать собственные расширения.

Рисунок 1. Вывод изображений с использованием контекста устройства в Windows

Как правило вы можете не заботиться о характеристиках устройств, на которых реально будет работать приложение. Однако, при разработке сложных приложений, которые могут широко распространяться, вы должны все–таки позаботиться о некоторых вопросах совместимости — например, при назначении цветов стоит их подбирать так, что бы при переходе на черно–белое оборудование изображение осталось бы различимым. Часто лучшим решением является возможность легкой настройки программы пользователем под его конкретную аппаратуру, либо использование только системных цветов (конечно, если для всех объектов, отображаемых приложением, предусмотрены системные цвета).

Обычно надо позаботиться о нормальном функционировании приложения в следующих случаях:

если приложение осуществляет вывод только в окно, то надо учитывать возможность работы:

с разным разрешением — от 640x400, 640x480 и до часто встречающихся 1024x768, 1280x1024. Было бы очень желательно, что бы даже в режиме 640x400 все диалоги и окна помещались на экране.

с разным числом цветов — от 16 и до более чем 16 миллионов цветов. При этом надо учитывать как количество цветов, которое поддерживается видеокартой, так и количество цветов, которое может воспроизводить дисплей. Чисто монохроматические дисплеи (черный и белый) уже практически не встречаются, а вот дисплеи дешевых переносных компьютеров часто дают только 8–16 градаций серого; причем различимость цветов может быть невелика. Сравнительно редкий случай, когда может встретиться монохроматический дисплей — разработка приложений для работы на серверах.

с разными настройками системной палитры; включая контрастные и энергосберегающие режимы (иногда применяются для переносных компьютеров)

если приложение способно выводить на принтер, то надо иметь в виду, что вместо принтера может оказаться плоттер, который хорошо рисует линии, но совершенно не может выводить растровых изображений, либо АЦПУ, которое способно только печатать текст.

Получение информации об устройстве

Контекст устройства содержит два вида данных — информацию об устройстве и так называемые атрибуты контекста. Информация об устройстве включает в себя описание непосредственно того графического устройства, на котором будет осуществляться вывод и возможности этого устройства по выполнению расширенных функций GDI. Эти данные специфичны для аппаратуры.

Для того, что бы получить информацию об устройстве в GDI предусмотрена функция int GetDeviceCaps (hDC, nIndex);

Эта функция возвращает целое число, являющееся значением указанного аргументом nIndex параметра устройства. В windows.h определено значительное количество символических имен, определяющих возвращаемые функцией GetDeviceCaps данные. Возвращаемое число может представлять собой как непосредственное значение запрашиваемого параметра (например, ширину устройства в миллиметрах), либо битовой последовательностью, в которой отдельные биты являются флагами (см., например, параметр RASTERCAPS). Полный список всех возможных характеристик устройства весьма обширен, поэтому приводить его здесь не будем; при необходимости можно обратиться к формальному описанию функции GetDeviceCaps в документации. Некоторые из них:

DRIVERVERSION

Версия драйвера. 0x0100 обозначает версию 1.0

HORZSIZE, VERTSIZE

размер устройства вывода в миллиметрах

HORZRES, VERTRES

размер устройства вывода в единицах устройства вывода (пикселях)

LOGPIXELSX,

LOGPIXELSY

число единиц устройства (пикселей), приходящееся на один логический дюйм1

BITSPERPIXEL

число бит на 1 пиксель

PLANES

число битовых планов

TECHNOLOGY

тип устройства, может принимать следующие значения:

DT_PLOTTER векторный плоттер

DT_RASDISPLAY растровый дисплей

DT_RASPRINTER растровый принтер

DT_RASCAMERA растровая камера

DT_CHARSTREAM поток символов

DT_METAFILE метафайл

DT_DISPFILE дисплейный файл

NUMBRUSHES

Число встроенных кистей

NUMPENS

Число встроенных перьев

ASPECTX

Относительная ширина пикселя

ASPECTY

Относительная высота пикселя

ASPECTXY

Относительная диагональ пикселя

RASTERCAPS

Битовая маска, указывающая возможности устройства при работе с растровыми операциями

RC_BANDING поддерживает пополосный вывод

RC_BITBLT может передавать битмапы

RC_BITMAP64 битмапы могут быть больше 64К

RC_DI_BITMAP поддерживает независимые от устройства битмапы

RC_DIBTODEV поддерживает функцию SetDIBitsToDevice

RC_FLOODFILL может выполнять заливку замкнутых контуров

RC_GDI20_OUTPUT поддерживает расширения версии 2.0 GDI

RC_PALETTE устройство использует палитру

RC_SCALING устройство может масштабировать

RC_STRETCHBLT устройство поддерживает функцию StretchBlt

RC_STRETCHDIB устройство поддерживает функцию StretchDIBits...

...

...

Одной из идей разработки GDI было обеспечение единого программного интерфейса со всеми устройствами, однако реализовать ее в полной мере практически невозможно. Поэтому вам иногда придется определять характеристики устройства, на котором вы осуществляете вывод. Например, если вы собираетесь отобразить на принтере какой–либо битмап, то надо проверить бит RC_BITBLT в параметре RASTERCAPS, так как плоттеры и АЦПУ не могут работать с растровыми изображениями; или вам может понадобиться узнать, какое число цветов может быть отображено на дисплее или цветном принтере и т.д.

Атрибуты контекста устройства

Атрибуты контекста описывают уже не само устройство а те "инструменты" и правила, которыми и по которым будет осуществляться вывод на это устройство. Атрибуты контекста являются независимыми от аппаратуры.

Контекст устройства содержит, помимо информации об устройстве, так называемые "атрибуты" контекста. Так, например, когда мы выводим текст, то применяем тот или иной шрифт. Текущий шрифт — это один из атрибутов контекста устройства. Аналогично перья, кисти, цвета и др. тоже являются атрибутами контекста устройства. Приведем полную таблицу атрибутов:

Название атрибута

Стандартное значение

Установить

Получить

Mapping mode

Система координат

MM_TEXT

SetMapMode

GetMapMode

Window origin

Начало отсчета в логических координатах

0,0

SetWindowOrg 0

SetWindowOrgEx

OffsetWindowOrg 0

OffsetWindowOrgEx

GetWindowOrg 0

GetWindowOrgEx

Viewport origin

Начало отсчета в координатах устройства

0,0

SetViewportOrg 0

SetViewportOrgEx

OffsetViewportOrg 0

OffsetViewportOrgEx

GetViewportOrg 0

GetViewportOrgEx

Window extents

Масштабные коэффициенты системы координат

1,1

SetWindowExt 0

SetWindowExtEx

SetMapMode

ScaleWindowExt 0

ScaleWindowExtEx

GetWindowExt 0

GetWindowExtEx

Viewport extents

Масштабные коэффициенты системы координат

1,1

SetViewportExt 0

SetViewportExtEx

SetMapMode

ScaleViewportExt 0

ScaleViewportExtEx

GetViewportExt 0

GetViewportExtEx

Pen

Перо (карандаш)

BLACK_PEN

SelectObject

SelectPen 2

SelectObject

SelectPen 2

Current pen position

Текущая позиция пера

0,0

MoveTo 0

MoveToEx

LineTo

GetCurrentPosition 0

GetCurrentPositionEx

Brush

Кисть

WHITE_BRUSH

SelectObject

SelectBrush 2

SelectObject

SelectBrush 2

Brush origin

Начальная точка кисти

0,0 (screen)

SetBrushOrg 0

SetBrushOrgEx

GetBrushOrg 0

GetBrushOrgEx

Font

Шрифт

SYSTEM_FONT

SelectObject

SelectFont 2

SelectObjectSelectFont 2

Bitmap

Ассоциируемый битмап

отсутствует

SelectObject

SelectBitmap 2

SelectObject

SelectBitmap 2

Background mode

Режим заполнения фона

OPAQUE

SetBkMode

GetBkMode

Background color

Цвет фона

White

SetBkColor

GetBkColor

Text color

Цвет текста

BLACK

SetTextColor

GetTextColor

Drawing mode

Режим рисования

R2_COPYPEN

SetROP2

GetROP2

Stretching mode

Режим сжатия изображения

BLACKONWHITE

SetStretchBltMode

GetStretchBltMode

Polygon filling mode

Режим заполнения многоугольников

ALTERNATE

SetPolyFillMode

GetPolyFillMode

Text Alignment

Привязка текста

TA_LEFT|TA_TOP

SetTextAlign

GetTextAlign

Intercharacter spacing

Межсимвольный промежуток

0

SetTextCharacterExtra

GetTextCharacterExtra

Text Justification

Выравнивание строки

0,0

SetTextJustification

SetTextJustification

Clipping region

Область отображения

отсутствует

SelectObject

SelectClipRgn

IntersectClipRect

OffsetClipRect

ExcludeClipRect

SelectObject

GetClipBox

Arc direction

Направление рисования дуг

AD_COUNTERCLOCKWISE

SetArcDirection

GetArcDirection

В случае платформы Win32

Miter Limit

Величина спрямления сопрягаемых линий

10.0

SetMiterLimit 1

GetMiterLimit 1

Graphics Mode

Режим задания координат

GM_COMPATIBLE

SetGraphicsMode 1

GetGraphicsMode 1

World Transformation Matrix

Матрица преобразования глобальных координат

1.0,0.0,0.0

0.0,1.0,0.0

SetWorldTransform 1

GetWorldTransform 1

В последующих разделах все эти атрибуты будут рассмотрены применительно к изображению тех примитивов, на отображение которых они влияют.

Характеристики

Тип файла
Документ
Размер
4,85 Mb
Тип материала
Учебное заведение
Неизвестно

Тип файла документ

Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.

Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.

Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7027
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее