Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

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.

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. 
 // 
}

Feedback

Was this page helpful?

Additional resources