Параметры растра можно получить при помощи функции GetObject(), которая может переправить данные в структуре BITMAP или DIBSECTION.

Если функция получает дескриптор объекта HBITMAP, длину буфера si zeof (BITMAP) и адрес буфера для получения информации о картинке, то в буфер будет записана структура, синтаксис которой приведен ниже:

typedef struct tagBITMAP
{
LONG bmType; LONG bmWidth: LONG bmHeight: LONG bmWidthBytes: WORD bmPlanes: WORD bmBitsPixel: LPVOID bmBits: } BITMAP;

Поля структуры задают тип и размеры изображения в пикселах, длину строки изображения в байтах, количество битовых плоскостей и количество бит видеопамяти, задающих цвет одной точки экрана. Поле bmPlanes, как правило, имеет единичное значение, так как четыре битовых плоскости использовались в 16-цвет-ных режимах и в так называемых Х-режимах адаптеров VGA. Оба эти режима сейчас редко применяются. Длина строки bmWi dthBytes указывается вместе с нулевыми байтами, добавленными для кратности четырем, поэтому размер изображеЗагрузка данных из ВМР-файла ния в байтах удобнее вычислять, используя структуру BITMAP, а не рассмотренную раньше структуру BITMAPINFOHEADER.

Содержимое структуры BITMAP будет различным для аппаратно-зависимых и ап-паратно-независимых растровых изображений.

Предположим, что видеоадаптер поддерживает графический режим с глубиной цветности 16 бит и при вводе данных из файла Tstl0_3.bmp задан флаг LR_CREATEDIBSECTION. Теперь нужно заполнить структуру BitMap при помощи следующего вызова функции:

HBITMAP hBit; BITMAP BitMap:
GetObject(hBit. &BitMap.sizeof(BITMAP)):

После выполнения этого фрагмента кода поле bmBi tsPi xel будет заполнено десятичным числом 24. Это свидетельствует о том, что в памяти создается аппарат-но-независимый растр, точки которого задаются тремя байтами. В последнем поле bmBi ts будет записан указатель на область памяти, в которой хранятся графические данные. Цвета точек будут задаваться, начиная с нижней строки растра, и будет использоваться по три байта на каждую точку. Если же в Load Image () не указать флаг LRCREATEDIBSECTION, то будет создано аппаратно-зависимое растровое изображение. В этом случае после вызова GetObject() в поле bmBi tsPixel структуры BITMAP будет записано не значение 24, заданное в файле, а соответствующее текущему видеорежиму значение 16. Также поле bmBi ts не будет указывать на графические данные, так как в нем будет записан пустой указатель. Помимо этого изменится значение поля ЬтТуре структуры BITMAP.


⇐ Предыдущая| |Следующая ⇒