如何从文件加载位图
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; }
此示例中省略了一些代码。
相关主题