Direct2D Intro - Load Bitmap From Resource

来源:互联网 发布:云上贵州大数据的意义 编辑:程序博客网 时间:2024/06/05 06:14


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

  1. Create an IWICImagingFactory object to create Windows Imaging Component (WIC) objects.

    C++
    Copy
    // Create WIC factoryhr = CoCreateInstance(    CLSID_WICImagingFactory,    NULL,    CLSCTX_INPROC_SERVER,    IID_PPV_ARGS(&m_pIWICFactory)    );
  2. Use the CreateDecoderFromFilename method to create an IWICBitmapDecoder from an image file.

    C++
    Copy
    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   );
  3. 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, seeHow to Retrieve the Frames of an Image for accessing each frame of the image.

  4. Create the IWICBitmapClipper to use for the image clipping.

    C++
    Copy
    IWICBitmapClipper *pIClipper = NULL;if (SUCCEEDED(hr)){   hr = m_pIWICFactory->CreateBitmapClipper(&pIClipper);}
  5. Initialize the clipper object with the image data within the given rectangle of the bitmap frame.

    C++
    Copy
    // 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);}
  6. 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}.

    Illustration of imaging clipping

0 0
原创粉丝点击