Функция StretchDIBits копирует данные о цвете для прямоугольника пикселей в аппаратно-независимом растровом формате (DIB) в заданный принимающий прямоугольник. Если целевой прямоугольник является больше, чем исходный прямоугольник, эта функция расширяет ряды и столбцы данных о цвете, чтобы подогнать их под принимающий прямоугольник. Если принимающий прямоугольник является меньше, чем исходный, StretchDIBits сжимает ряды и столбцы при помощи использования заданной растровой операции.
Windows 98/Me, Windows 2000/XP: функция StretchDIBits расширена, чтобы дать возможность изображение в формате 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 = StretchDIBits(hdc,
// целевой прямоугольник
ulDstX, ulDstY, ulDstWidth, ulDstHeight,
// источниковый прямоугольник
0, 0, ulJpgWidth, ulJpgHeight,
pvJpgImage,
&bmi,
DIB_RGB_COLORS,
SRCCOPY);
if (iRet == GDI_ERROR)
return FALSE;
}
else
{
//
// Декомпрессируем изображение в формат DIB и вызовем
// функцию StretchDIBits вместо DIB.
//
}
|