请问SetDiBitsToDevice(......)这个函数怎么用,请说的具体点。

解决方案 »

  1.   

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