Функция SetDIBitsToDevice использует данные о цвете от аппаратно-независимого растрового формата (DIB), чтобы установить пиксели в определяемом прямоугольнике устройства, которое связано с целевым контекстом устройства.
Windows 98/Me, Windows 2000/XP: функция SetDIBitsToDevice расширена, чтобы дать возможность изображения формата JPEG и PNG передавать как исходное изображение
Например:
//
// pvJpgImage указатель на буфер, содержащий изображение JPEG
// nJpgImageSize - размер этого буфера
// ulJpgWidth - ширина изображения JPEG
// ulJpgHeight - высота изображения JPEG
//
//
// Проверим, поддерживается ли CHECKJPEGFORMAT (устройство имеет
// поддержку JPEG) и используется ли он, проверим как устройство может
// обрабатывать изображения в формате JPEG.
//
ul = CHECKJPEGFORMAT;
if (
// Проверим, существует ли CHECKJPEGFORMAT:
(ExtEscape(hdc, QUERYESCSUPPORT,
sizeof(ul), &ul, 0, 0) > 0) &&
// Проверим, без ошибок ли исполнен CHECKJPEGFORMAT:
(ExtEscape(hdc, CHECKJPEGFORMAT,
pvJpgImage, nJpgImageSize, sizeof(ul), &ul) > 0) &&
// Проверим код состояния возвращенный CHECKJPEGFORMAT:
(ul == 1)
)
{
//
// Инициализируем структуру BITMAPINFO.
//
memset(&bmi, 0, sizeof(bmi));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = ulJpgWidth;
bmi.bmiHeader.biHeight = -ulJpgHeight;// изобразим сверху вниз
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 0;
bmi.bmiHeader.biCompression = BI_JPEG;
bmi.bmiHeader.biSizeImage = nJpgImageSize;
//
// Создадим SetDIBitsToDevice.
//
iRet = SetDIBitsToDevice(hdc,
ulDstX, ulDstY,
ulDstWidth, ulDstHeight,
0, 0,
0, ulJpgHeight,
pvJpgImage,
&bmi,
DIB_RGB_COLORS);
if (iRet == GDI_ERROR)
return FALSE;
}
else
{
//
// Декомпрессируем изображение в формат DIB и вызовем
// функцию SetDIBitsToDevicewith вместо DIB.
//
}
|