Загрузка...
 
Печать

Windows GDI. Выводим растровое изображение (Bitmap)




Контекст памяти

  • Является специфическим типом контекста устройства.
  • Операции вывода в контекст памяти не приведут к отображению этого вывода на реальном устройстве. Содержимое контекста памяти можно отобразить на устройстве, с которым он совместим.
  • Концептуально очень похож на поверхность DirectDraw.
Функция CreateCompatibleDC создаёт контекст памяти:
Прототип функции CreateCompatibleDC
HDC CreateCompatibleDC(HDC hdc);

Единственный параметр является дескриптором контекста какого-либо реального устройства. Если в качестве этого параметра указать NULL, то создаваемый контекст будет совместим с текущим экраном, что на практике означает совместимость с контекстом Рабочего стола Windows. После создания контекста памяти его поверхность представляет собой один монохромный пиксель, растянутый по всей ширине и высоте. Поэтому рисовать в контексте устройства сразу после его создания не имеет смысла. Для этого надо сначала обеспечить контекст памяти нужной поверхностью. Первый шаг к этому -создание объекта GDI типа растр (HBITMAP). Например с помощью функции CreateCompatibleBitmap:
Прототип функции CreateCompatibleBitmap
HBITMAP CreateCompatibleBitmap(HDC hdc, int nWidth, int nHeight);

Три параметра функции описывают контекст устройства, с которым будет совместим растр, ширину и высоту создаваемого растра. Первый параметр влияет на цветовую организацию растра и на используемую палитру. Эти характеристики будут соответствовать аналогичным характеристикам контекста устройства hdc. При успешном завершении функция возвращает дескриптор создаваемого растра.
После создания растра его необходимо выбрать в контекст памяти. Например, так:
// Получить контекст реального устройства
hdc=GetDC(hwnd);
// Создать контекст памяти и растр
hMemDC=CreateCompatibleDC(hdc);
hMemBitmap=CreateCompatibleBitmap(hdc, 200, 200);
// Выбрать растр в контекст памяти
SelectBitmap(hMemDC, hMemBitmap);

По завершении работы с контекстом памяти его необходимо удалить при помощи функции DeleteDC:
Прототип функции DeleteDC
BOOL DeleteDC(HDC hdc);

Закрыть
noteОбрати внимание

Если контекст создавался при помощи функции CreateCompatibleDC, то освобождать его нужно функцией DeleteDC. Если контекст получен при помощи функций GetDC и GetWindowDC, то освобождать его нужно функцией ReleaseDC.

После удаления контекста памяти, необходимо удалить ранее созданный растр. Например, с помощью функции DeleteObject:
Прототип функции DeleteObject
BOOL DeleteObject(HGDIOBJ hObject);

Здесь hObject - реально существующий дескриптор логического пера, кисти, шрифта, растровой (точечной) картинки, региона или палитры.
В случае неудачного завершения возвращает "0" (ноль).

Копирование блоков

В GDI реализовано несколько функций, позволяющих копировать участки контекстов (в нашем случае они являются массивами точек) один в другой. В названии каждой из этих функций присутствует суффикс Blt (block transfer - англ. "блочное копирование").

Функция PatBlt

Функция PatBlt не производит копирования, а лишь заполняет нужный прямоугольник текущей кистью, выбранной в контекст:
Прототип функции PatBlt
BOOL PatBlt(HDC hdc, int nXLeft, int nYLeft,
int nWidth, int nHeight, DWORD dwRop);

Параметры функции PatBlt:
ПАРАМЕТР ОПИСАНИЕ
HDC hdc Дескриптор контекста устройства.
int nXLeft Х-координата, в логических единицах измерения, верхнего левого угла окрашиваемого прямоугольника.
int nYLeft Y-координата, в логических единицах измерения, верхнего левого угла окрашиваемого прямоугольника.
int nWidth Ширина окрашиваемого прямоугольника (в логических единицах).
int nHeight Высота окрашиваемого прямоугольника (в логических единицах).
DWORD dwRop Код растровой операции. Возможные значения представлены в Таблице 1.


Таблица 1. Возможные значения параметра dwRop функции PatBlt
ЗНАЧЕНИЕ ОПИСАНИЕ
PATCOPY Копирует заданный узор (PAT - от англ. pattern - "узор, заливка") в принимающий точечный рисунок.
PATINVERT Объединяет цвета заданного узора с цветами целевого прямоугольника, используя булев оператор исключающее ИЛИ (XOR).
DSTINVERT Инвертирует целевой прямоугольник.
BLACKNESS Закрашивает целевой прямоугольник, используя цвет, связанный с индексом 0 в физической палитре. (Этот цвет является черным для заданной по умолчанию физической палитры.).
WHITENESS Закрашивает целевой прямоугольник, используя цвет, связанный с индексом 1 в физической палитре. (Этот цвет является белым для заданной по умолчанию физической палитры.)

В случае завершения работы функции с ошибкой, возвращается "0" (ноль).

Функция BitBlt

  • копирует блоки из одного контекста в другой:
Прототип функции BitBlt
BOOL BitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth,
int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop);

Параметры функции BitBlt:1
ПАРАМЕТР ОПИСАНИЕ
HDC hdcDest Дескриптор целевого контекста устройства.
int nXDest x-коорд. левого верхнего угла целевого прямоугольника.
int nYDest y-коорд. левого верхнего угла целевого прямоугольника.
int nWidth Устанавливает ширину (в логических единицах измерения) исходного и целевого прямоугольников.
int nHeight Устанавливает высоту (в логических единицах измерения) исходного и целевого прямоугольников.
HDC hdcSrc Дескриптор исходного контекста устройства.
int nXSrc x-коорд. левого верхнего угла исходного прямоугольника.
int nYSrc y-коорд. левого верхнего угла исходного прямоугольника.
DWORD dwRop Код растровой операции. Возможные значения представлены в Таблице 2.


Таблица 2. Возможные значения параметра dwRop функции BitBlt
ЗНАЧЕНИЕ ОПИСАНИЕ
BLACKNESS Заполняет целевой прямоугольник, используя цвет, связанный с индексом 0 в физической палитре. (Этот цвет является черным для заданной по умолчанию физической палитры.)
WHITENESS Заполняет целевой прямоугольник, используя цвет, связанный с индексом 1 в физической палитре. (Этот цвет является белым для заданной по умолчанию физической палитры.)
CAPTUREBLT Windows 98/Me, Windows 2000/XP: Включает любые окна, которые наслоены поверх вашего окна в результирующем изображении. По умолчанию, изображение содержит только ваше окно.
DSTINVERT Инвертирует целевой прямоугольник.
MERGECOPY Объединяет цвета исходного прямоугольника с кистью в текущий момент выбранной в hdcDest, при помощи использования булева оператора И (AND).
MERGEPAINT Объединяет цвета инвертированного исходного прямоугольника с цветами целевого прямоугольника при помощи использования булева оператора ИЛИ (OR).
NOMIRRORBITMAP Windows 98/Me, Windows 2000/XP: Препятствует точечному рисунку быть зеркалируемым.
NOTSRCCOPY Копирует инвертированный исходный прямоугольник в целевой.
NOTSRCERASE Комбинирует цвета исходных и целевых прямоугольников при помощи использования булева оператора ИЛИ (OR) и затем инвертирует получающийся в результате цвет.
PATCOPY Копирует кисть, в текущий момент выбранную в hdcDest, в целевой точечный рисунок.
PATINVERT Комбинирует цвета кисти, в текущий момент выбранной в hdcDest, с цветами инвертированного исходного прямоугольника при помощи использования булева оператора ИЛИ (OR). Результаты этой операции объединяются с цветами целевого прямоугольника при помощи использования булева оператора ИЛИ (OR).
SRCAND Комбинирует цвета исходных и целевых прямоугольников при помощи использования булева оператора И (AND).
SRCCOPY Копирует исходный прямоугольник непосредственно в целевой прямоугольник. Применяется наиболее часто.
SRCERASE Комбинирует инвертированные цвета целевого прямоугольника с цветами исходного прямоугольника при помощи использования булева оператора И (AND).
SRCINVERT Комбинирует цвета источникового и целевого прямоугольников при помощи использования булева оператора исключающее ИЛИ (XOR).
SRCPAINT Комбинирует цвета источникового и целевого прямоугольников при помощи использования булева оператора ИЛИ (OR).

Замечания:
  • Функция BitBlt делает отсечение по границам только в целевом контексте устройства (DC).
  • Если в исходном контексте устройства действует вращение или преобразование сдвига фрагмента изображения, BitBlt возвращает ошибку. Если в исходном контексте устройства встречаются другие преобразования (а преобразование соответствия в целевом контексте устройства не действует ), прямоугольник в целевом контексте устройства растягивается, сжимается или вращается, по мере необходимости.
  • Если цветовые форматы источниковых и целевых контекстов устройства не соответствуют, функция BitBlt преобразует исходный цветовой формат, чтобы он соответствовал целевому формату.
  • Когда фиксируется расширенный метафайл, происходит ошибка, если исходный контекст устройства идентифицирует контекст устройства расширенного метафайла.
  • Не все устройства поддерживают функцию BitBlt. Для подробной информации, см. RC_BITBLT характеристика растровой записи в функции GetDeviceCaps, а так же в следующих функциях: MaskBlt, PlgBlt и StretchBlt.
  • BitBlt возвращает ошибку, если источниковый и целевой контексты устройства обозначают различные устройства. Чтобы пересылать данные между контекстами устройства (DC) для разных устройств, преобразуйте точечный рисунок в аппаратно-независимый растровый формат (DIB) при помощи вызова функции GetDIBits. Чтобы показать на экране аппаратно-независимый растровый формат (DIB) для второго устройства, вызовите функцию SetDIBits или StretchDIBits.
  • В случае завершения работы функции с ошибкой, возвращается "0" (ноль).

Функция StretchBlt

  • копирует блоки из одного контекста в другой + изменяет размеры изображения (растягивает или сжимает) в соответствии с размерами прямоугольника-приёмника:
Прототип функции StretchBlt
BOOL StretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest,
HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop);

Параметры функции StretchBlt:
ПАРАМЕТР ОПИСАНИЕ
HDC hdcDest Дескриптор целевого контекста устройства.
int nXOriginDest x-коорд. левого верхнего угла целевого прямоугольника.
int nYOriginDest y-коорд. левого верхнего угла целевого прямоугольника.
int nWidthDest Ширина (в логических единицах измерения) целевого прямоугольника.
int nHeightDest Высота (в логических единицах измерения) целевого прямоугольника.
HDC hdcSrc Дескриптор исходного контекста устройства.
int nXOriginSrc x-коорд. левого верхнего угла исходного прямоугольника.
int nYOriginSrc y-коорд. левого верхнего угла исходного прямоугольника.
int nWidthSrc Ширина (в логических единицах измерения) исходного прямоугольника.
int nHeightSrc Высота (в логических единицах измерения) исходного прямоугольника.
DWORD dwRop Код растровой операции. Возможные значения представлены в Таблице 2.


Если прямоугольник-источник при копировании отличается по размеру от прямоугольника-приёмника, то GDI будет вынужден произвести растяжение или сжатие соответствующих измерений. Различные режимы растяжения/сжатия задаются при помощи функции SetStretchBltMode:
Прототип функции SetStretchBltMode
BOOL SetStretchBltMode(HDC hdc, int iStretchMode);

Первый параметр - дескриптор контекста устройства, для которго устанавливается нужный режим.
Второй параметр (int iStretchMode) является режимом растяжения. Он может принимать одно из следующих значений:
Таблица 3. Возможные значения параметра int iStretchMode функции SetStretchBltMode
ЗНАЧЕНИЕ ОПИСАНИЕ
COLORONCOLOR В этом режиме избыточные строки и столбцы просто уничтожаются ("обрезаются") без попытки использовать хранящуюся в них информацию. Наиболее часто используемый режим при копировании участков цветных растров.
BLACKONWHITE Выполняет булеву операцию И (AND), используя коды цвета для ликвидируемых и существующих пикселей. Для каждой удаляемой строки/столбца осуществляется логическая поразрядная операция AND между удаляемой и остающейся строкой/столбцом. Для чёрно-белого растра обеспечивается преобладание чёрных точек над белыми.
WHITEONBLACK Выполняет булеву операцию И (AND), используя коды цвета для ликвидируемых и существующих пикселей. Для каждой удаляемой строки/столбца осуществляется логическая поразрядная операция OR между удаляемой и остающейся строкой/столбцом. Для чёрно-белого растра обеспечивается преобладание белых точек над чёрными.
HALFTONE Преобразует пиксели исходного прямоугольника в блоки пикселей в целевом прямоугольнике. Среднее значение цвета всего целевого блока пикселей подбирается близким по значению к цвету исходных пикселей. После установки режима растяжения HALFTONE , приложение должно вызвать функцию SetBrushOrgEx, чтобы установить начало координат кисти. Если она завершается ошибкой, то происходит нарушение границ кисти Этот параметр не поддерживается в среде Windows 95/98/Me.
STRETCH_ANDSCANS Такое же как и BLACKONWHITE.
STRETCH_DELETESCANS Такое же как и COLORONCOLOR.
STRETCH_HALFTONE Такое же как и HALFTONE.
STRETCH_ORSCANS Такое же как и WHITEONBLACK.

В случае успешного завершения, возвращаемое значение - предшествующий режим растяжения. Иначе - возвращается 0 (ноль).
Замечания:
  • Режим растяжения определяет, как система комбинирует ряды или столбцы точечного рисунка с существующими пикселями в устройстве отображения, когда приложение вызывает функцию StretchBlt.
  • Режимы BLACKONWHITE (STRETCH_ANDSCANS) и WHITEONBLACK (STRETCH_ORSCANS), обычно используются для, сбережения пикселей изображения в монохромных точечных рисунках. Режим COLORONCOLOR (STRETCH_DELETESCANS) обычно используется для, сбережения точечных рисунков цвет в цвет.
  • Режим HALFTONE медленнее и требует большей обработки исходного изображения, чем остальные три режима; но создает изображение более высокого качества.

Аппаратно-независимые растры

  • Не являются объектами GDI.
  • Подразделяются на 2 вида: палитровые и беспалитровые.
  • За их размещение в памяти, хранение и последующее удаление отвечает программист.
  • Основное назначение аппаратно-независимых растров - хранение на диске с возможностью последующего корректного вывода битмапа на обширном классе устройств.
Наряду с растровыми объектами GDI, начиная с Windows 3.0, была введена поддержка аппаратно-независимых растров (Device Independent Bitmap - DIB). Поскольку цветность традиционных аппаратно-зависимых растров (Device Dependent Bitmap - DDB) зависит от того устройства, для которого они предназначены, они не годятся для обмена информацией между устройствами. Если устройство, на которое переносится такой графический файл имеет другую цветовую организацию, то качество переноса будет крайне низким. Для решения этой проблемы (и некоторых других) была создана поддержка DIB. Она включает в себя всего несколько функций, позволяющих преобразовывать DIB к DDB, совместимому с конкретным устройством.
Для того, чтобы функции GDI могли работать с DIB, изображения этого вида должны иметь строго определённую структуру:
Структура файла BMP, содержащего палитру:
BITMAPFILEHEADER BITMAPINFOHEADER ПАЛИТРА RGBQUAD(256) ГРАФИЧЕСКИЕ ДАННЫЕ

Структура файла BMP, не содержащего палитру:
BITMAPFILEHEADER BITMAPINFOHEADER ГРАФИЧЕСКИЕ ДАННЫЕ

В обоих случаях изображение представляет собой массив точек, хранящихся построчно. Для изображения, использующего палитру, графические данные для каждой точки представляют собой лишь указатели на индексы в палитре. Для беспалитрового изображения графические данные представляют собой непосредственные комбинации соотношений красного, зелёного и синего цветов для каждой точки.
Типичный DIB-файл (в Windows он обычно имеет расширение BMP) начинается со структуры BITMAPFILEHEADER, позволяющей начать работу с ним:
Структура BITMAPFILEHEADER
typedef struct tagBITMAPFILEHEADER
{
	WORD bfType; //	Тип файла. Должен содержать 'BM'
	DWORD bfSize; //	Размер файла в байтах
	WORD bfReserved1;	// Зарезервировано. В данный момент здевь всегда 0 (ноль)
	WORD bfReserved2;	// Зарезервировано. В данный момент здевь всегда 0 (ноль)
	DWORD bfOffBits;	// Смещение от начала файла до графических данных
} BITMAPFILEHEADER;

Для работы с функциями GDI эта структура не нужна. Она необходима лишь на этапе считывания файла в память, чтобы правильно определить тип файла и начало графических данных. Сама же структура, как правило, в оперативную память не считывается.
Следом за структурой BITMAPFILEHEADER в графическом файле располагается структура BITMAPINFOHEADER, содержащая важные сведения об изображении:
Структура BITMAPINFOHEADER
typedef struct tagBITMAPINFOHEADER
{
	DWORD bfSize;	// Размер файла в байтах
	LONG biWidth;	// Ширина растра в пикселях
	LONG biHeight;	// Высота растра в пикселях
	WORD biPlanes;	// Количество плоскостей (всегда 1)
	WORD biBitCount;	// Количество бит на 1 пиксель
	DWORD biCompression;	// Тип сжатия (BI_RGB - без сжатия)
	DWORD biSizeImage;	// Размер изображения в байтах (обычно 0)
	LONG biXPelsPerMeter;	// Разрешение по горизонтали
	LONG biYPelsPerMeter;	// Разрешение по вертикали
	DWORD biClrUsed;	// Количество используемых цветов
	DWORD biClrImportant;	// Количество важных цветов (обычно 0)
}BITMAPINFOHEADER;

Замечания:
  • Количество бит на 1 пиксель характеризует максимальное количество цветов в растре. Самые распространённые значения поля biBitCount - 8 (для 256-цветных палитровых изображений) и 24 (для беспалитровых изображений). При значении 8 следом за структурой BITMAPINFOHEADER палитра с выбранными в неё и индексированными цветами. Количество элементов в палитре 8-битного файла BMP равно , как правило, 256. То есть используются все доступные позиции в палитре. При значении 24 палитра отсутствует, и следом за структурой BITMAPINFOHEADER сразу располагаются графические данные.
  • Большинство файлов BMP хранится на жёстком диске ПК без сжатия. Поэтому далее будет рассматриваться только этот случай. Впрочем, функции GDI умело работают и со сжатыми растрами.

Структура BITMAPFILEHEADER является частью более общей структуры BITMAPINFO, которая объединяет в себе заголовок DIB и палитру:
Структура BITMAPINFO
typedef struct tagBITMAPINFO
{
	BITMAPINFOHEADER bmiHeader;	// Информационный заголовок растра
	RGBQUAD bmiColors[1];	// Массив структур, реализующих палитру
}BITMAPINFO;

Структура RGBQUAD описывает так называемый RGB-триплекс, который при помощи смешения трёх базовых цветов (красного, зелёного и синего) определяет текущий цвет:
Структура RGBQUAD
typedef struct tagRGBQUAD
{
	BYTE rgbBlue;	// Синяя составляющая
	BYTE rgbGreen;	// Зелёная составляющая
	BYTE rgbRed;	// Красная составляющая
	BYTE rgbReserved;	// Зарезервированный параметр
}	RGBQUAD;

Не забываем, что размер структуры RGBQUAD равен 24 битам. В случае 24-битного файла BMP, первая структура RGBQUAD после BITMAPINFOHEADER описывает цвет реальной точки, а в случае 8-битного файла BMP - лишь элемент палитры.
Для палитровых файлов рекомендуется определять начало палитры при помощи выражения:
pColor = ((LPSTR)pBitmapInfo + (WORD) (pBitmapInfo->bmiHeader.bSize));

Это делается для возможности последующего изменения структуры BITMAPINFOHEADER с целью добавления новых возможностей в DIB, например новых методов компрессии. Для ОС MS Windows 95/98/2000 это уже было проделано: введены новые структуры BITMAPV4HEADER и BITMAPV5HEADER.
Следом за палитрой (для палитровых файлов) или непосредственно за структурой BITMAPINFOHEADER (для беспалитровых файлов) располагаются собственно графические данные. Они хранятся построчно друг за другом. Примечательно, что распространённой практикой является хранение данных BMP "вверх ногами" (т.е. первая строка расположена в самом "низу", в конце файла). Кроме того, если размер строки растра не кратен 4, то она дополняется от 1 до 3 пустыми (нулевыми байтами), чтобы длина строки оказалась кратна параграфу. При использовании функций GDI необходимо соблюдать эти принципы, хотя в остальных случаях это делать вовсе необязательно.

Функции для работы с аппаратно-независимыми растрами

Функция CreateDIBitmap создаёт растровый объект GDI из аппаратно-независимого растра:
Прототип функции CreateDIBitmap
HBITMAP CreateDIBitmap(HDC hdc, CONST BITMAPINFOHEADER *lpbmih,
	DWORD fdwInit, CONST VOID *lpbInit, CONST BITMAPINFO *lpbmi,
	UINT fuUsage);

Параметры функции CreateDIBitmap:
ПАРАМЕТР ОПИСАНИЕ
HDC hdc Дескриптор контекста устройства, с которым должен быть совместим получаемый растр.
CONST BITMAPINFOHEADER *lpbmih Указатель на структуру содержащую информацию о заголовке точечного рисунка. Она обычно берётся из самого растрового файла. В MS Windows 3.51 (и более ранних) она называется BITMAPINFOHEADER. В MS Windows 95 и MS Windows NT 4.0 - BITMAPV4HEADER. В MS Windows 98/Me и MS Windows 2000 - BITMAPV5HEADER.
DWORD fdwInit Определяет, как система инициализирует растровые биты. При значении CBM_INIT для инициализации растровых битов система использует данные, на которые указывают параметры lpbInit и lpbmi. При значении 0 (ноль) система не инициализирует растровые биты.
CONST VOID *lpbInit Указатель на массив байтов, содержащих исходные растровые данные. Формат данных зависит от члена biBitCount структуры BITMAPINFO, на которую указывает параметр lpbmi.
CONST BITMAPINFO *lpbmi Указатель на структуру BITMAPINFO, описывающую размеры и цветовой формат массива, на который указывает параметр lpbInit.
UINT fuUsage Определяет, был ли член bmiColors структуры BITMAPINFO инициализирован и, если это так, содержит ли bmiColors явно значения красного , зеленого, синего цветов (RGB) или индексы палитры. При значении DIB_PAL_COLORS таблица цветов предусматривается и состоит из массива 16-битовых индексов в логической палитре контекста устройства, в который должен выбираться точечный рисунок. При значении DIB_RGB_COLORS таблица цветов предусматривается и содержит точные значения RGB.

В случае успешного завершения работы функции, возвращаемое значение - дескриптор совместимого точечного рисунка. В случае ошибки возвращается NULL.
Замечания:
  • Аппаратно-зависимый точечный рисунок (DDB), который создается, должен быть без определенной битовой глубины цвета вашего применяемого контекста устройства (DC). Чтобы создавать точечный рисунок, который имеет другую битовую глубину цвета, используйте функцию CreateDIBSection.
  • Чтобы достичь оптимальной скорости рисования растра устройством, установите параметр fdwInit в значение CBM_INIT. Затем используйте тот же самый разрядность цвета формата DIB как видео режим. Когда видеоизображение выполняется в режиме 4- или 8- бит на пиксель (bpp), используйте флажок DIB_PAL_COLORS.
  • Флажок CBM_CREATDIB для параметра fdwInit больше не поддерживается.
  • Когда вам больше не нужен точечный рисунок, вызовите функцию DeleteObject, чтобы удалить его.
  • ICM: Управление цветом не выполняется. Соответственно содержание результирующего точечного рисунка, после того, как он создался, является не цветным.
  • MS Windows 95/98/Me: Созданный точечный рисунок по величине не может быть больше 16 МБ.

Функция StretchDIBits позволяет скопировать указанный прямоугольник данных, расположенный в аппаратно-независимом растре, внутрь какого-либо контекста устройства:
Прототип функции StretchDIBits
int StretchDIBits(HDC hdc, int XDest, int YDest, int nDestWidth,
	int nDestHeight, int XSrc, int YSrc, int nSrcWidth, nSrcHeight,
	CONST VOID *lpBits, CONST BITMAPINFO *lpBitsInfo, UINT iUsage,
	DWORD dwRop);

Параметры функции StretchDIBits:
ПАРАМЕТР ОПИСАНИЕ
HDC hdcDest Дескриптор целевого (принимающего) контекста устройства.
int XDest x-коорд. левого верхнего угла целевого прямоугольника.
int YDest y-коорд. левого верхнего угла целевого прямоугольника.
int nDestWidth Ширина (в логических единицах измерения) целевого прямоугольника.
int nDestHeight Высота (в логических единицах измерения) целевого прямоугольника.
int XSrc x-коорд. левого верхнего угла исходного прямоугольника.
int YSrc y-коорд. левого верхнего угла исходного прямоугольника.
int nSrcWidth Ширина исходного прямоугольника в DIB в пикселях.
int nSrcHeight Высота исходного прямоугольника в DIB в пикселях.
CONST VOID *lpBits Указывает на графические данные копируемого DIB. Является указателем на биты аппаратно-независимого растрового формата (DIB), которые сохраняются как массив байтов.
CONST BITMAPINFO *lpBitsInfo Указатель на структуру BITMAPINFO, которая содержит информацию об растровом формате (DIB).
UINT iUsage Устанавливает, предусматривался ли член bmiColors структуры BITMAPINFO и, если это так, содержит ли член bmiColors значения (RGB) чистого красного, зеленого, синего цветов или индексы палитры. При значении DIB_PAL_COLORS массив состоит из 16-битовых индексов в логической палитре источникового контекста устройства. При значении DIB_RGB_COLORS таблица цветов содержит значения констант RGB.
DWORD dwRop Код растровой операции. Возможные значения представлены в Таблице 2.

В случае успешного завершения работы функции, возвращаемое значение - число скопированных строк развертки. В случае ошибки возвращается GDI_ERROR.
Замечания:
  • Начало координат идущего снизу вверх растрового формата (DIB) - нижний левый угол; начало координат идущего сверху вниз растрового формата (DIB) - левый верхний угол.
  • Если знаки параметров nSrcWidth и nDestWidth или параметров nSrcHeight и nDestHeight различаются, функция StretchDIBits создает зеркальное изображение точечного рисунка. Если nSrcWidth и nDestWidth имеют разные знаки, функция создает зеркальное изображение точечного рисунка по оси X. Если nSrcHeight и nDestHeight имеют разные знаки, функция создает зеркальное изображение точечного рисунка по оси Y.
  • ICM: Управление цветом выполняется. Совокупность параметров цвета текущего контекста устройства используется как исходная конфигурация цветового пространства и используется sRGB цветовое пространство.
  • Windows 98/Me, Windows 2000/XP: Эта функция дает возможность передавать формат изображения JPEG или PNG как исходное изображение. При использовании каждый параметр остается тем же самым, кроме следующих случаев:
  • Если член biCompression структуры BITMAPINFOHEADER - BI_JPEG или BI_PNG, параметр lpBits указывает на буфер, содержащий формат изображения JPEG или PNG, соответственно. Член biSizeImage структуры BITMAPINFOHEADER устанавливает размер буфера. Параметр iUsage должен быть установлен в DIB_RGB_COLORS. Параметр dwRop должен быть установлен в SRCCOPY.
  • Чтобы гарантировать надлежащее помещение метафайла в очередь процесса обработки при печати, приложения должны вызывать функцию перехода формата CHECKJPEGFORMAT или CHECKPNGFORMAT, чтобы проверить, что принтер распознает формат JPEG или PNG, соответственно, перед вызовом StretchDIBits.
При использовании функций CreateDIBitmap и StretchDIBits происходит преобразование цветов, хранящихся в DIB, в цвета конкретного устройства, определяемого дескриптором hdc.

Источники


1. http://www.vsokovikov.narod.ru(external link) Авторский сайт Владимира Соковикова. Русскоязычные переводы статей из MSDN.


Последние изменения страницы Пятница 17 / Июнь, 2022 12:25:10 MSK

Последние комментарии wiki

No records to display

Search Wiki Page

Точное совпадение

Категории

|--> C#
|--> C++