如何從檔案載入點陣圖

Direct2D 會使用 Windows 映像處理元件 (WIC) 來載入點陣圖。 若要從檔案載入點陣圖,請先使用 WIC 物件來載入影像,並將其轉換成 Direct2D 相容的格式,然後使用 CreateBitmapFromWicBitmap 方法來建立 ID2D1Bitmap

  1. 使用IWICImagingFactory::CreateDecoderFromFileName方法建立IWICBitmapDecoder

    HRESULT DemoApp::LoadBitmapFromFile(
        ID2D1RenderTarget *pRenderTarget,
        IWICImagingFactory *pIWICFactory,
        PCWSTR uri,
        UINT destinationWidth,
        UINT destinationHeight,
        ID2D1Bitmap **ppBitmap
        )
    {
        IWICBitmapDecoder *pDecoder = NULL;
        IWICBitmapFrameDecode *pSource = NULL;
        IWICStream *pStream = NULL;
        IWICFormatConverter *pConverter = NULL;
        IWICBitmapScaler *pScaler = NULL;
    
        HRESULT hr = pIWICFactory->CreateDecoderFromFilename(
            uri,
            NULL,
            GENERIC_READ,
            WICDecodeMetadataCacheOnLoad,
            &pDecoder
            );
    
    
  2. 從影像擷取框架,並將框架儲存在 IWICBitmapFrameDecode 物件中。

        if (SUCCEEDED(hr))
        {
            // Create the initial frame.
            hr = pDecoder->GetFrame(0, &pSource);
        }
    
  3. 點陣圖必須轉換成 Direct2D 可以使用的格式,因此請將影像的像素格式轉換為 32bppPBGRA。 (如需支援的格式清單,請參閱 像素格式和 Alpha 模式。) 。 呼叫 IWICImagingFactory::CreateFormatConverter 方法來建立 IWICFormatConverter 物件,然後呼叫 IWICFormatConverter 物件的 Initialize 方法來執行轉換。

        if (SUCCEEDED(hr))
        {
    
            // Convert the image format to 32bppPBGRA
            // (DXGI_FORMAT_B8G8R8A8_UNORM + D2D1_ALPHA_MODE_PREMULTIPLIED).
            hr = pIWICFactory->CreateFormatConverter(&pConverter);
    
        }
    
    
        if (SUCCEEDED(hr))
        {
            hr = pConverter->Initialize(
                pSource,
                GUID_WICPixelFormat32bppPBGRA,
                WICBitmapDitherTypeNone,
                NULL,
                0.f,
                WICBitmapPaletteTypeMedianCut
                );
    
  4. 呼叫 CreateBitmapFromWicBitmap 方法,以建立可由轉譯目標繪製並與其他 Direct2D 物件搭配使用的 ID2D1Bitmap 物件。

        if (SUCCEEDED(hr))
        {
    
            // Create a Direct2D bitmap from the WIC bitmap.
            hr = pRenderTarget->CreateBitmapFromWicBitmap(
                pConverter,
                NULL,
                ppBitmap
                );
        }
    
        SafeRelease(&pDecoder);
        SafeRelease(&pSource);
        SafeRelease(&pStream);
        SafeRelease(&pConverter);
        SafeRelease(&pScaler);
    
        return hr;
    }
    

此範例已省略某些程式碼。

ID2D1Bitmap

CreateBitmapFromWicBitmap

如何從資源載入點陣圖