Größe eines JPEG- oder PNG-Bilds
Die StretchDIBits--Funktion kopiert die Farbdaten für ein Rechteck von Pixeln in einem DIB in das angegebene Zielrechteck. Wenn das Zielrechteck größer als das Quellrechteck ist, streckt diese Funktion die Zeilen und Spalten von Farbdaten, um das Zielrechteck anzupassen. Wenn das Zielrechteck kleiner als das Quellrechteck ist, StretchDIBits die Zeilen und Spalten mithilfe des angegebenen Rastervorgangs komprimiert.
StretchDIBits erweitert wird, um zuzulassen, dass ein JPEG- oder PNG-Bild als Quellbild übergeben werden kann.
Zum Beispiel:
// 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,
nJpgImageSize, pvJpgImage, 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 StretchDIBits.
//
iRet = StretchDIBits(hdc,
// destination rectangle
ulDstX, ulDstY, ulDstWidth, ulDstHeight,
// source rectangle
0, 0, ulJpgWidth, ulJpgHeight,
pvJpgImage,
&bmi,
DIB_RGB_COLORS,
SRCCOPY);
if (iRet == GDI_ERROR)
return FALSE;
}
else
{
//
// Decompress image into a DIB and call StretchDIBits
// with the DIB instead.
//
}