JPEG 또는 PNG 이미지 크기 조정
StretchDIBits 함수는 DIB의 픽셀 사각형에 대한 색 데이터를 지정된 대상 사각형에 복사합니다. 대상 사각형이 원본 사각형보다 큰 경우 이 함수는 대상 사각형에 맞게 색 데이터의 행과 열을 늘립니다. 대상 사각형이 원본 사각형보다 작은 경우 StretchDIBits 는 지정된 래스터 작업을 사용하여 행과 열을 압축합니다.
StretchDIBits 는 JPEG 또는 PNG 이미지를 원본 이미지로 전달할 수 있도록 확장됩니다.
예:
// 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.
//
}