Растровые изображения, пиктограммы и метафайлы
В системе Windows предусмотрено три разных типа изображений, которые могут использоваться в приложении: растровые изображения, пиктограммы и метафайлы. Изображение каждого типа применяется в приложении для разных целей. Растровые изображения обычно применяются для вывода рисунков, которые не должны масштабироваться, особенно если содержат текст. Пиктограммы — это уменьшенные версии растровых изображений, которые обычно применяются в качестве графических идентификаторов для окон. Метафайлы используются вместо растровых изображений, когда последние не соответствуют требованиям, предъявляемым к приложениям. Метафайл может содержать текст и масштабироваться без потери качества изображения или текста.
Растровые изображения
Растровые изображения — это блоки пиксельных данных, которые могут быть выведены непосредственно на устройство, такое как видеодисплей. Их можно также рассматривать как средство записи пиксельных данных непосредственно с экрана в буфер памяти. Вывод растровых изображений на экран происходит намного быстрее по сравнению с выводом с использованием таких функций GDI, как Rectangle и УпеТо. Недостатками растровых изображений является то, что они занимают много места в памяти и на диске, а также плохо масштабируются, особенно если содержат текст. При масштабировании растрового изображения теряется качество и искажается текст.
В Windows предусмотрены два типа растровых изображений: аппаратно-зависимое растровое изображение (DDB — device-dependent bitmap) и аппаратно-независимое растровое изображение (DIB — device-independent bitmap). Аппаратно-зависимое растровое изображение — это более старый формат и, как показывает само его название, он является менее гибким по сравнению с форматом аппаратно-независимого растрового изображения.
Использование растровых изображений DDB
Обычно растровые изображения создаются с применением программы рисования, такой как SDKPaint, или с применением редактора растровых изображений, например редактора, встроенного в Visual C++. Эти растровые изображения хранятся в виде файлов на диске с расширением .BMP. Такое растровое изображение фактически хранится в формате DIB и преобразуется автоматически в формат DDB при вызове функции LoadBitmap. Файлы растровых изображений можно ввести в файл описания ресурса приложения (RC) с помощью оператора BITMAP. В листинге 13.1
показано, как загрузить аппаратно-зависимое растровое изображение и отобразить его на экране.
Листинг 13.1. Пример применения формата DPS
Файл описания ресурса
pen BITMAP реп.Ьшр
Пример кода
СМ. \locaJ-sources\chapJ3\tl3-01.txt
В этом примере загружается файл PEN.BMP, и растровому ресурсу присваивается имя "реп". Растровое изображение, загруженное в составе ресурсов в приложение, переносится в память с помощью функции LoadBitmap. Вывод растрового изображения на экран происходит немного сложнее. В приложении выполняется загрузка растрового изображения в контекст устройства памяти, а затем — вывод контекста устройства памяти на экран с помощью функции BitBlt.
Формат DDB хорошо приспособлен для копирования частей экрана в память и вставки этих частей в другие места экрана. Проблемы возникают, когда в приложении нужно сохранить данные растрового изображения в файлах на диске, а затем отобразить их на устройстве другого типа. В заголовке файла DDB нет места для хранения цветов, используемых при создании растрового изображения. Этот формат разработан на основе предпосылки, что растровое изображение всегда будет отображаться на устройстве того же типа, с теми же цветами. При выводе такого растрового изображения на другое устройство цвета могут оказаться совсем иными. Именно в таком случае лучше применять аппаратно-независимые растровые изображения.
Использование растровых изображений DIB
В аппаратно-независимых растровых изображениях (DIB) устранены недостатки DDB. Основная разница между форматами DIB и DDB состоит в том, что формат DIB включает таблицу цветов, применяемых в растровом изображении. Заголовок файла растрового изображения такого типа также значительно сложнее. В отличие от DDB, DIB — это не графический объект, а формат данных. В приложении нельзя выбрать объект типа DIB в контекст устройства.
Как показано на рис. 13.1, формат DIB структуры BITMAPINFO состоит из двух разделов, за которыми следуют пиксельные данные. Первый раздел представляет собой структуру BITMAPINFOHEADER, которая показана ниже. Дополнительная информация об этой структуре приведена в описании функции CreateDIBitmap далее в этой главе.
typedef struct tagBITMAPINFOHEADER
DWORD biSize; // Размер структуры BITMAPINFOHEADER
LONG biWidth; // Ширина в пикселях
LONG biHeight; // Высота в пикселях
WORD biPlanes; // Всегда равен 1
WORD biBitCount // Битов кодировки цвета на пиксель
DWORD biCompression; // BI_RGB, BI_RLE8, или BI_RLE4
DWORD biSizelmage; // Общий объем изображения в байтах
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.