https://msdn.microsoft.com/en-us/library/windows/desktop/ee719657(v=vs.85).aspx
This topic demonstrates how to obtain a rectangular portion of an IWICBitmapSource using an IWICBitmapClipper component.
To clip 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; 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 IWICBitmapClipper to use for the image clipping.
C++IWICBitmapClipper *pIClipper = NULL; if (SUCCEEDED(hr)) { hr = m_pIWICFactory->CreateBitmapClipper(&pIClipper); }
-
Initialize the clipper object with the image data within the given rectangle of the bitmap frame.
C++// Create the clipping rectangle. WICRect rcClip = { 0, 0, uiWidth/2, uiHeight/2 }; // Initialize the clipper with the given rectangle of the frame's image data. if (SUCCEEDED(hr)) { hr = pIClipper->Initialize(pIDecoderFrame, &rcClip); }
-
Draw or process the clipped image.
The following illustration demonstrates imaging clipping. The original image on the left is 200 x 130 pixels. The image on the right is the original image clipped to a rectangle defined as
{20,20,100,100}
.