Добавлен: 29.10.2018
Просмотров: 48173
Скачиваний: 190
5.6. Пользовательский интерфейс: клавиатура, мышь, монитор
461
приведет к выводу на экран прямоугольника, показанного на рис. 5.29. Ширина линий,
их цвет, цвет закраски берутся из контекста устройства. Другие GDI-вызовы в чем-то
похожи на этот.
Рис. 5.29. Пример прямоугольника, нарисованного с помощью процедуры Rectangle.
Каждый квадрат соответствует одному пикселу
Растровые изображения
GDI-процедуры являются примерами векторной графики. Они используются для
помещения геометрических фигур и текста на экран, могут легко масштабироваться
применительно к более крупным или более мелким экранам (при одном и том же числе
пикселов на экране). Они также имеют относительную независимость от применяе-
мых устройств. Набор вызовов GDI-процедур может быть собран в файл, который
может описать какой-нибудь сложный рисунок. Такие файлы в Windows называются
метафайлами
(metafile). Они широко используются для передачи рисунков из одной
программы Windows в другую и имеют расширение имени
.wmf
.
Многие Windows-программы позволяют пользователю копировать рисунок (полно-
стью или частично) и помещать эту копию в буфер обмена Windows. Затем пользова-
тель может перейти к другой программе и вставить содержимое буфера обмена в другой
документ. Один из способов выполнения этой операции касается представления ри-
сунка в первой программе в виде метафайла Windows и помещения его в буфер обмена
в
.wmf
-формате. Существуют и другие способы.
Но не все изображения, с которыми работает компьютер, могут быть созданы при
помощи векторной графики. К примеру, в фотографиях и видеоклипах векторная гра-
фика не используется. Вместо нее подобные объекты сканируются путем наложения
координатной сетки на изображение. Затем усредненные значения красной, зеленой
и синей составляющих каждой клеточки этой сетки оцифровываются и сохраняются
в виде значения одного пиксела. Такой файл называется растровым изображением
(bitmap). Система Windows предоставляет широкие возможности для работы с рас-
тровыми изображениями.
Другой пример использования растровых изображений касается текста. Один из
способов представления отдельного символа в каком-либо из шрифтов заключается
в использовании небольшого растрового изображения. В этом случае добавление тек-
ста к изображению на экране превращается в перемещение растровых изображений.
462
Глава 5. Ввод и вывод информации
Основной способ применения растровых изображений связан с процедурой по имени
BitBlt. Вызов этой процедуры выглядит следующим образом:
BitBlt(dsthdc, dx, dy, wid, ht, srchdc, sx, sy, rasterop);
В наипростейшей форме она копирует растровое изображение из прямоугольника
в одном окне в другое окно (или в то же самое окно). Первые три параметра определяют
окно назначения и позицию. После них следуют ширина и высота. Затем указываются
исходное окно и позиция. Учтите, что у каждого окна существует своя система коор-
динат, где позиция (0, 0) находится в верхнем левом углу окна. И последний параметр
будет рассмотрен чуть позже. Результат вызова
BitBlt(hdc2, 1, 2, 5, 7, hdc1, 2, 2, SRCCOPY);
показан на рис. 5.30. Обратите особое внимание на то, что была скопирована вся об-
ласть 5 × 7 пикселов с латинским символом A, включая и цвет фона.
Рис. 5.30. Копирование растровых изображений с помощью процедуры BitBlt:
а — состояние до копирования; б — состояние после копирования
Процедура BitBlt способна на большее, чем простое копирование растровых изобра-
жений. Последний параметр дает возможность осуществления булевых операций для
комбинирования исходного и целевого растровых изображений. К примеру, исходное
изображение может быть наложено с применением операции ИЛИ на целевое изо-
бражение, чтобы слиться с ним. Может быть также применена операция ИСКЛЮ-
ЧАЮЩЕЕ ИЛИ, которая сохраняет характеристики как источника, так и приемника.
Проблема работы с растровыми изображениями заключается в том, что они не масшта-
бируются. Символ, находящийся в прямоугольнике 8 × 12, на экране 640 × 480 будет смо-
треться вполне приемлемо. Но если это растровое изображение копируется на печатный
лист с разрешением 1200 точек на дюйм, что соответствует 10 200 × 13 200 битов, ширина
символа (8 пикселов) будет составлять 8/1200 дюйма, или 0,17 мм. Вдобавок к этому
копирование между устройствами с различными цветовыми свойствами или между
черно-белым и цветным устройствами не всегда приводит к приемлемым результатам.
Поэтому Windows поддерживает также структуру данных, называемую растровым изо-
бражением, не зависящим от устройства (Device Independent Bitmap (DIB)). Файлы,
использующие этот формат, имеют расширение имени
.bmp
. Они имеют собственные
файловые и информационные заголовки, а также цветовую таблицу, которые располо-
5.6. Пользовательский интерфейс: клавиатура, мышь, монитор
463
жены до пикселов. Эта информация облегчает перемещение растровых изображений
между разнородными устройствами.
Шрифты
В версиях, предшествующих Windows 3.1, символы были представлены в виде растровых
изображений и копировались на экран или на принтер с помощью процедуры BitBlt.
Но как мы уже знаем, проблема состояла в том, что растровые изображения, пригодные
для экрана, были слишком маленькими для принтера. К тому же для каждого размера
символа нужно было другое растровое изображение. Иными словами, при наличии
растрового изображения для A размером 10 пунктов не существует способа его пере-
счета для получения размера 12 пунктов. Поскольку мог потребоваться каждый символ
каждого шрифта в диапазоне размеров от 4 до 120 пунктов, нужно было иметь огромное
количество растровых изображений. Система вывода текста была слишком громоздкой.
Решением проблемы стало применение шрифтов TrueType, в которых использовались
не растровые изображения, а очертания символов. Каждый символ TrueType определя-
ется последовательностью точек по его периметру. Все точки задаются относительно
начала координат (0, 0). При использовании этой системы масштабирование символов
в обе стороны осуществляется довольно просто. Для этого следует лишь умножить
каждую координату на один и тот же коэффициент масштабирования. Таким образом,
символ TrueType может масштабироваться вверх и вниз до любого, даже дробного,
размера в пунктах. После получения нужного размера точки могут быть соединены
с использованием хорошо известного алгоритма рисования по точкам, которому учат
в детском саду (учтите, что в современных детских садах для получения более плавных
результатов используются сплайны). После создания очертания символ может быть
закрашен. Пример масштабирования некоторых символов до трех различных размеров
в пунктах показан на рис. 5.31.
Рис. 5.31. Примеры контуров символов разного размера в пунктах
Так как закрашенный символ доступен в виде его математического описания, он может
быть приведен к растровой форме, то есть преобразован в растровое изображение в лю-
бом требуемом разрешении. Осуществляя сначала масштабирование, а затем перевод
464
Глава 5. Ввод и вывод информации
в растровое изображение, можно обеспечить максимальное сближение внешнего вида
символов, отображаемых на экране, и символов, выводимых на печать, сводя различие
лишь к ошибкам квантования. Для дальнейшего повышения качества можно в каж-
дый символ встроить подсказки о том, как его нужно переводить в растровую форму.
К примеру, обе засечки в верхней части буквы T должны быть одинаковыми, а этого,
возможно, нельзя было бы добиться иным путем из-за ошибок округления. А подсказки
приводят к улучшению окончательного внешнего вида.
Сенсорные экраны
Экраны все чаще используются в качестве устройств ввода. Особенно удобно прика-
саться к экрану и проводить по нему пальцем (или стилусом) в смартфонах, планшет-
ных компьютерах и других ультрапортативных устройствах. Пользователь восприни-
мает такие устройства не так, как устройства, использующие мышь, а больше полагаясь
на интуицию, поскольку он взаимодействует с объектами на экране напрямую. Ис-
следования показали, что успешно обращаться с сенсорными устройствами, подобно
малым детям, способны даже орангутаны и другие приматы.
Сенсорным устройством не обязательно должен быть экран. Такие устройства делятся
на две категории: непрозрачные и прозрачные. Типичным непрозрачным устройством
является сенсорная панель ноутбука. Примером прозрачного устройства может послу-
жить сенсорный экран смартфона или планшетного компьютера. Но в данном разделе
мы ограничимся сенсорными экранами.
Как и многое другое из того, что входило в моду в компьютерной индустрии, сенсор-
ные экраны не являются совершенно новыми устройствами. Еще в далеком 1965 году
И. А. Джонсон (E. A. Johnson) из Британского королевского института радиолокации
дал описание сенсорного емкостного дисплея, который при всем своем несовершенстве
стал предшественником сегодняшних дисплеев. Большинство современных сенсорных
экранов имеют либо емкостную, либо резистивную конструкцию.
Резистивные экраны
имеют гибкую пластиковую поверхность. Сам по себе пластик не
содержит ничего особенного, за исключением того, что он более устойчив к царапинам,
чем тот пластик, который используется в быту. Но на него с обратной стороны нанесена
пленка, состоящая из тонких линий ITO (Indium Tin Oxide — оксида индия — олова)
или другого подходящего материала. Под ним, но без соприкосновения, расположена
вторая поверхность, также покрытая слоем ITO. На верхней поверхности электриче-
ский ток идет в вертикальном направлении, а в сверху и снизу есть токопроводящие
соединения. На нижней поверхности электрический ток идет в горизонтальном на-
правлении, а слева и справа имеются токопроводящие соединения. При прикоснове-
нии к экрану пластик вдавливается и верхний слой ITO прикасается к нижнему. Для
определения точной позиции прикосновения пальца или стилуса нужно лишь измерить
сопротивление в обоих направлениях во всех горизонтальных позициях нижнего слоя
и во всех вертикальных позициях верхнего слоя.
Емкостные экраны
имеют две твердые, обычно стеклянные поверхности, каждая из
которых покрыта слоем ITO. В обычной конфигурации ITO наносится на каждую по-
верхность в виде параллельных линий и линии на верхней поверхности расположены
перпендикулярно по отношению к линиям нижней поверхности. Например, верхний
слой может быть покрыт тонкими линиями в вертикальном направлении, а нижний
слой может иметь такой же полосатый рисунок в горизонтальном направлении. Две
5.6. Пользовательский интерфейс: клавиатура, мышь, монитор
465
находящиеся под воздействием электрического тока поверхности с воздушной про-
слойкой между ними формируют решетку из настоящих миниатюрных конденсаторов.
Напряжение подается поочередно к горизонтальным и вертикальным линиям, а зна-
чения напряжения, зависящие от емкости каждого пересечения, считываются с тех
линий, на которые оно в данный момент не подано. Когда палец прикасается к экрану,
локальная емкость изменяется. Появляется возможность определить место прикосно-
вения пальца к экрану путем очень точных измерений повсеместных незначительных
изменений напряжения. Эта операция повторяется много раз в секунду, и координаты
прикосновений передаются драйверу устройства в виде потока пар (x, y). Дальнейшая
обработка, например определение того, что именно произошло: указание, сжатие, рас-
ширение или просто провели пальцем по экрану, — осуществляется операционной
системой.
Преимуществом резистивных экранов является то, что результаты измерений опреде-
ляются давлением. Иными словами, экран будет работать, даже если вы в холодную
погоду надели перчатки. С емкостными экранами дело обстоит иначе, если только
у вас на руках не специальные перчатки. Например, вы можете вшить проводники
(например, посеребренные нейлоновые нити) в перчатки, в те места, которые будут
находиться на кончиках пальцев, или, если не дружите с иглой, купить уже готовые
перчатки подобного типа. Конечно, можно просто обрезать перчатки, обнажив кончики
пальцев, что займет у вас всего 10 секунд.
А вот недостатком резистивных экранов является то, что они обычно не поддерживают
определение множественных прикосновений, совершаемых одновременно. Между
тем такие прикосновения позволяют манипулировать объектами на экране с помощью
двух и более пальцев. Людям (и, возможно, орангутанам) нравится использовать мно-
жественные прикосновения, поскольку они позволяют жестами, совершаемыми двумя
пальцами, сужать и расширять картинку или документ. Представьте себе, что два паль-
ца находятся в точках с координатами (3, 3) и (8, 8). В результате этого резистивный
экран может заметить изменение сопротивления на вертикальных линиях x = 3 и x = 8
и на горизонтальных линиях y = 3 и y = 8. Теперь рассмотрим другой сценарий, при
котором пальцы находятся в точках с координатами (3, 8) и (8, 3), представляющими
собой противоположные углы прямоугольника с координатами (3, 3), (8, 3), (8, 8)
и (3, 8). Изменилось сопротивление в точности тех же линий, поэтому программное
обеспечение не в состоянии сообщить, какой из двух сценариев следует поддерживать.
Эта проблема называется появлением призраков. А вот емкостные экраны, поскольку
они отправляют поток координат (x, y), лучше приспособлены к поддержке множе-
ственных прикосновений.
Манипулирование сенсорным экраном с использованием только одного пальца ничем,
собственно, не отличается от использования WIMP-интерфейса — просто указатель
мыши заменяется стилусом или указательным пальцем. Поддержка множественных
прикосновений намного сложнее. Прикосновение к экрану пятью пальцами похоже
на одновременное перемещение по экрану пяти указателей мыши, что, несомненно,
меняет положение вещей для диспетчера окна. Экраны с поддержкой множественных
прикосновений (мультитач-экраны) получили повсеместное распространение и стано-
вятся все более чувствительными и точными. И все же неясно, влияет ли технология
использования всех пяти пальцев на работу сердца компьютера — центрального про-
цессора — в той же мере, что и удар в восточных единоборствах всеми пятью пальцами
в грудь, который в теории должен приводить к разрыву сердца.