如何從檔案載入點陣圖
Direct2D 會使用 Windows 映像處理元件 (WIC) 來載入點陣圖。 若要從檔案載入點陣圖,請先使用 WIC 物件來載入影像,並將其轉換成 Direct2D 相容的格式,然後使用 CreateBitmapFromWicBitmap 方法來建立 ID2D1Bitmap。
使用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 );
從影像擷取框架,並將框架儲存在 IWICBitmapFrameDecode 物件中。
if (SUCCEEDED(hr)) { // Create the initial frame. hr = pDecoder->GetFrame(0, &pSource); }
點陣圖必須轉換成 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 );
呼叫 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; }
此範例已省略某些程式碼。
相關主題