Sample----Testing a Printer for JPEG or PNG Support The SetDIBitsToDevice function uses color data from a DIB to set the pixels in the specified rectangle on the device that is associated with the destination device context. Windows 98/Me, Windows 2000/XP: SetDIBitsToDevice is extended to allow a JPEG or PNG image to be passed as the source image.For example:// // pvJpgImage points to a buffer containing the JPEG image // nJpgImageSize is the size of the buffer // ulJpgWidth is the width of the JPEG image // ulJpgHeight is the height of the JPEG image //// // Check if CHECKJPEGFORMAT is supported (device has JPEG support) // and use it to verify that device can handle the JPEG image. //ul = CHECKJPEGFORMAT;if ( // Check if CHECKJPEGFORMAT exists: (ExtEscape(hdc, QUERYESCSUPPORT, sizeof(ul), &ul, 0, 0) > 0) && // Check if CHECKJPEGFORMAT executed without error: (ExtEscape(hdc, CHECKJPEGFORMAT, pvJpgImage, nJpgImageSize, sizeof(ul), &ul) > 0) && // Check status code returned by CHECKJPEGFORMAT: (ul == 1) ) { // // Initialize the BITMAPINFO. // memset(&bmi, 0, sizeof(bmi)); bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = ulJpgWidth; bmi.bmiHeader.biHeight = -ulJpgHeight; // top-down image bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 0; bmi.bmiHeader.biCompression = BI_JPEG; bmi.bmiHeader.biSizeImage = nJpgImageSize; // // Do the SetDIBitsToDevice. // iRet = SetDIBitsToDevice(hdc, ulDstX, ulDstY, ulDstWidth, ulDstHeight, 0, 0, 0, ulJpgHeight, pvJpgImage, &bmi, DIB_RGB_COLORS); if (iRet == GDI_ERROR) return FALSE; } else { // // Decompress image into a DIB and call SetDIBitsToDevice // with the DIB instead. // }
The SetDIBitsToDevice function uses color data from a DIB to set the pixels in the specified rectangle on the device that is associated with the destination device context. Windows 98/Me, Windows 2000/XP: SetDIBitsToDevice is extended to allow a JPEG or PNG image to be passed as the source image.For example://
// pvJpgImage points to a buffer containing the JPEG image
// nJpgImageSize is the size of the buffer
// ulJpgWidth is the width of the JPEG image
// ulJpgHeight is the height of the JPEG image
////
// Check if CHECKJPEGFORMAT is supported (device has JPEG support)
// and use it to verify that device can handle the JPEG image.
//ul = CHECKJPEGFORMAT;if (
// Check if CHECKJPEGFORMAT exists: (ExtEscape(hdc, QUERYESCSUPPORT,
sizeof(ul), &ul, 0, 0) > 0) && // Check if CHECKJPEGFORMAT executed without error: (ExtEscape(hdc, CHECKJPEGFORMAT,
pvJpgImage, nJpgImageSize, sizeof(ul), &ul) > 0) && // Check status code returned by CHECKJPEGFORMAT: (ul == 1)
)
{
//
// Initialize the BITMAPINFO.
// memset(&bmi, 0, sizeof(bmi));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = ulJpgWidth;
bmi.bmiHeader.biHeight = -ulJpgHeight; // top-down image
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 0;
bmi.bmiHeader.biCompression = BI_JPEG;
bmi.bmiHeader.biSizeImage = nJpgImageSize; //
// Do the SetDIBitsToDevice.
// iRet = SetDIBitsToDevice(hdc,
ulDstX, ulDstY,
ulDstWidth, ulDstHeight,
0, 0,
0, ulJpgHeight,
pvJpgImage,
&bmi,
DIB_RGB_COLORS); if (iRet == GDI_ERROR)
return FALSE;
}
else
{
//
// Decompress image into a DIB and call SetDIBitsToDevice
// with the DIB instead.
//
}