Четвертый BORLAND С++ и его окружение

Класс TDib


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

работы с DIB, аналогичный методам работы с другим объектами GDI.

Память для DIB выделяется одним фрагментом (с помощью функции

Windows GlobalAlloc), так что ее можно передать в буфер обмена,

OLE-серверу или клиенту.

Построить объект TDib вы можете прямо или косвенно. При непосредственном построении вы можете задать высоту, ширину битового массива и т.д. При косвенном построении вы можете задать существующий объект битового массива, указатель на структуру BITMAP, метафайл, контекст устройства TDC, буфера обмена и т.д.

Если ShouldDelete возвращает True, ~TDib освобождает ресурс

и используемую глобальную память.

Для доступа к инкапсулированному DIB TDib предусматривает

различные функции-элементы. Функции преобразования типов в TDib

позволяют вам обращаться к TDib наиболее удобным для конкретной

операции способом. Для доступа к TDib через HANDLE можно использовать операцию преобразования HANDLE. Вы можете также преобразовать объект TDib в три других типа битовых массивов. Для этого

используются операции BITMAPINFO, BITMAPINFOHEADER и TRgbQuad.



Для доступа к внутренним структурам DIB используются специальные функции с такими же именами BITMAPINFO, BITMAPINFOHEADER и

TRgbQuad. Функция GetIndices возвращает указатель на массив, содержащий биты фактического образа DIB.

Поместить объект DIB в буфер обмена Clipboard можно с помощью функции ToClipboard, в качестве единственного параметра которой задается ссылка на объект TClipboard. Так как эта функция

фактически удаляет объект из приложения, нужно использовать конструктор TDib для создания временного объекта.

Класс TDib предусматривает ряд функций доступа, которые можно использовать для опроса объекта TDib и получения информации о

содержащемся в объекте DIB.

Чтобы определить допустимость объекта, вызовите функцию


IsOK, которая не имеет параметров и возвращает True в случае допустимости объекта. Функция IsPM также не имеет параметров и

возвращает True, если DIB имеет представление, совместимое с Presentation Manager. Функции Width и Height возвращают ширину и высоту битового массива в элементах изображения. Функция Size возвращает ту же информацию в объекте TSize. Функция NumColor возвращает число используемых в битовом массиве цветов. StartScan предусмотрена для совместимости со старыми программами и всегда

возвращает 0. NumScan также обеспечивает совместимость и возвращает высоту DIB в элементах изображения. Функция Usage указывает,

в каком режиме находится DIB (DIB_RGB_COLORS или DIB_PAL_COLORS).

Функция WriteFile записывает объект DIB на диск.

Работа с палитрой в режиме RGB

DIB может включать в себя цветовые значения двумя способами.

В режиме палитры цветовая таблицы DIB. Сами значения цветов не

указывают конкретного цвета. Эти являются индексами соответствующей записи текущей палитры. В режиме RGB каждая запись в таблице

цветов DIB представляет фактическое значение цвета RGB. Переключиться из RGB на режим палитры и обратно можно с помощью функций

ChangeModeToPal и ChangeModeToRGB.

Когда вы переключаетесь в режим палитры с помощью ChangeModeToPal, в качестве палитры DIB используется параметр TPalette&.

Каждый используемый в DIB цвет отображается в палитру и преобразуется в индекс палитры. При переключении в режим RGB с помощью

ChangeModeToRGB параметр TPalette& используется для конвертирования индексов палитры в содержащиеся в палитре эквиваленты RGB.

Если вы работаете в режиме RGB, то можете использовать для

доступа к палитре цветов DIB и ее изменения следующие функции:

Функция Назначение
GetColor Получает любую запись в палитре цветов DIB по

индексу в таблице цветов. Возвращается объект TColor.
SetColor Изменяет запись в таблице цветов DIB. В параметрах указываются индекс в таблице цветов и

новое значение.
FindColor Сравнивает объект TColor с записью в таблице

цветов, используя функцию FindColor. В пара-

метре задается объект TColor.
MapColor Заменяет цвет в существующей таблице цветов.

Имеет 3 параметр: TColor, содержащий заменяемый цвет, TColor c новым цветом, и значение, указывающее, нужно ли заменить все вхождения.
GetIndex Позволяет получить индекс палитры любой для

любой таблицы цветов. Параметр задает индекс в таблице цветов. Возвращается значение индекса палитры.
FindIndex Находит индекс палитры по записи таблицы цветов. Выполняет поиск по таблицам цветов DIB. пока не найдет заданное в параметре значение.
MapIndex Заменяет цвет на цвет, уже существующий в

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

Содержание раздела