Функция 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. // } |