https://msdn.microsoft.com/en-us/library/windows/desktop/ee719664(v=vs.85).aspx
This topic demonstrates how to scale an IWICBitmapSource using the IWICBitmapScaler component.
To scale a bitmap source
-
Create an IWICImagingFactory object to create Windows Imaging Component (WIC) objects.
C++// Create WIC factory hr = CoCreateInstance( CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&m_pIWICFactory) );
-
Use the CreateDecoderFromFilename method to create an IWICBitmapDecoder from an image file.
C++HRESULT hr = S_OK; IWICBitmapDecoder *pIDecoder = NULL; IWICBitmapFrameDecode *pIDecoderFrame = NULL; IWICBitmapScaler *pIScaler = NULL; hr = m_pIWICFactory->CreateDecoderFromFilename( L"turtle.jpg", // Image to be decoded NULL, // Do not prefer a particular vendor GENERIC_READ, // Desired read access to the file WICDecodeMetadataCacheOnDemand, // Cache metadata when needed &pIDecoder // Pointer to the decoder );
-
Get the first IWICBitmapFrameDecode of the image.
C++// Retrieve the first bitmap frame. if (SUCCEEDED(hr)) { hr = pIDecoder->GetFrame(0, &pIDecoderFrame); }
The JPEG file format only supports a single frame. Because the file in this example is a JPEG file, the first frame (
0
) is used. For image formats that have multiple frames, see How to Retrieve the Frames of an Image for accessing each frame of the image. -
Create the IWICBitmapScaler to use for the image scaling.
C++// Create the scaler. if (SUCCEEDED(hr)) { hr = m_pIWICFactory->CreateBitmapScaler(&pIScaler); }
-
Initialize the scaler object with the image data of the bitmap frame at half the size.
C++// Initialize the scaler to half the size of the original source. if (SUCCEEDED(hr)) { hr = pIScaler->Initialize( pIDecoderFrame, // Bitmap source to scale. uiWidth/2, // Scale width to half of original. uiHeight/2, // Scale height to half of original. WICBitmapInterpolationModeFant); // Use Fant mode interpolation. }
-
Draw or process the scaled bitmap source.
The following illustration demonstrates imaging scaling. The original image on the left is 200 x 130 pixels. The image on the right is the original image scaled to half the size.