Cara Memuat Bitmap dari File
Direct2D menggunakan Komponen Pencitraan Windows (WIC) untuk memuat bitmap. Untuk memuat bitmap dari file, pertama-tama gunakan objek WIC untuk memuat gambar dan mengonversinya ke format yang kompatibel dengan Direct2D, lalu gunakan metode CreateBitmapFromWicBitmap untuk membuat ID2D1Bitmap.
Buat IWICBitmapDecoder dengan menggunakan metode 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 );
Ambil bingkai dari gambar dan simpan bingkai dalam objek IWICBitmapFrameDecode .
if (SUCCEEDED(hr)) { // Create the initial frame. hr = pDecoder->GetFrame(0, &pSource); }
Bitmap harus dikonversi ke format yang dapat digunakan Direct2D, jadi konversikan format piksel gambar menjadi 32bppPBGRA. (Untuk daftar format yang didukung, lihat Format Piksel dan Mode Alfa.). Panggil metode IWICImagingFactory::CreateFormatConverter untuk membuat objek IWICFormatConverter, lalu panggil metode Inisialisasi objek IWICFormatConverter untuk melakukan konversi.
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 );
Panggil metode CreateBitmapFromWicBitmap untuk membuat objek ID2D1Bitmap yang dapat digambar oleh target render dan digunakan dengan objek Direct2D lainnya.
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; }
Beberapa kode telah dihilangkan dari contoh ini.
Topik terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk