Abrufen der Frames aus einem Bild
In diesem Thema wird veranschaulicht, wie Sie ein Multiframebild decodieren und jeden Frame zur Verarbeitung abrufen.
So rufen Sie die Frames eines Bilds ab
Erstellen Sie eine IWICImagingFactory , um WIC-Objekte (Windows Imaging Component) zu erstellen.
// Create WIC factory hr = CoCreateInstance( CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&m_pIWICFactory) );
Verwenden Sie die CreateDecoderFromFilename-Methode , um einen IWICBitmapDecoder aus einer Bilddatei zu erstellen.
HRESULT hr = S_OK; IWICBitmapDecoder *pIDecoder = NULL; IWICBitmapFrameDecode *pIDecoderFrame = NULL; UINT nFrameCount = 0; UINT uiWidth, uiHeight; // Create decoder for an image. hr = m_pIWICFactory->CreateDecoderFromFilename( L"creek.tiff", // Image to be decoded NULL, // Do not prefer a particular vendor GENERIC_READ, // Desired read access to the file WICDecodeMetadataCacheOnDemand, // Cache metadata when needed &pIDecoder // Pointer to the decoder );
Rufen Sie die Anzahl der Frames in den Bildern ab.
// Retrieve the frame count of the image. if (SUCCEEDED(hr)) { hr = pIDecoder->GetFrameCount(&nFrameCount); }
Verarbeiten Sie jeden Frame, indem Sie einen IWICBitmapFrameDecode für jeden Frame im Bild abrufen.
// Process each frame in the image. for (UINT i=0; i < nFrameCount; i++) { // Retrieve the next bitmap frame. if (SUCCEEDED(hr)) { hr = pIDecoder->GetFrame(i, &pIDecoderFrame); } // Retrieve the size of the bitmap frame. if (SUCCEEDED(hr)) { hr = pIDecoderFrame->GetSize(&uiWidth, &uiHeight); } // Additional frame processing. // ... SafeRelease(&pIDecoderFrame); }
Weitere Informationen