您的位置:首页 > 其它

Direct2D Intro - Scale a Bitmap Source

2016-04-13 16:48 543 查看
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++

Copy

// 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++

Copy

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++

Copy

// 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++

Copy

// 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++

Copy

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: