Come caricare una bitmap da un file
Direct2D usa Windows Imaging Component (WIC) per caricare le bitmap. Per caricare una bitmap da un file, usare prima gli oggetti WIC per caricare l'immagine e convertirla in un formato compatibile con Direct2D, quindi usare il metodocreateBitmapFromWicBitmapper creare un ID2D1Bitmap.
Creare un IWICBitmapDecoder usando il metodo IWICImagingFactory::CreateDecoderFromFileName.
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 );
Recuperare un frame dall'immagine e archiviare il frame in un oggettoIWICBitmapFrameDecode.
if (SUCCEEDED(hr)) { // Create the initial frame. hr = pDecoder->GetFrame(0, &pSource); }
La bitmap deve essere convertita in un formato utilizzabile da Direct2D, quindi convertire il formato pixel dell'immagine in 32bppPGRA. Per un elenco dei formati supportati, vedere formati pixel e modalità alfa.). Chiamare il metodo IWICImagingFactory::CreateFormatConverter per creare un oggetto IWICFormatConverter, quindi chiamare il metodo Initialize sull'oggetto IWICFormatConverter per eseguire la conversione.
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 );
Chiamare il metodocreateBitmapFromWicBitmapper creare un oggetto ID2D1Bitmap che può essere disegnato da una destinazione di rendering e usato con altri oggetti Direct2D.
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; }
Alcuni codici sono stati omessi da questo esempio.
Argomenti correlati