Comment couper une source bitmap
Cette rubrique montre comment obtenir une partie rectangulaire d’un IWICBitmapSource à l’aide d’un composant IWICBitmapClipper .
Pour couper une source bitmap
Créez un objet IWICImagingFactory pour créer des objets WIC (Windows Imaging Component).
// Create WIC factory hr = CoCreateInstance( CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&m_pIWICFactory) );
Utilisez la méthode CreateDecoderFromFilename pour créer un IWICBitmapDecoder à partir d’un fichier image.
HRESULT hr = S_OK; IWICBitmapDecoder *pIDecoder = NULL; IWICBitmapFrameDecode *pIDecoderFrame = NULL; hr = m_pIWICFactory->CreateDecoderFromFilename( L"turtle.jpg", // 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 );
Obtenez le premier IWICBitmapFrameDecode de l’image.
// Retrieve the first bitmap frame. if (SUCCEEDED(hr)) { hr = pIDecoder->GetFrame(0, &pIDecoderFrame); }
Le format de fichier JPEG ne prend en charge qu’une seule image. Étant donné que le fichier de cet exemple est un fichier JPEG, la première image (
0
) est utilisée. Pour connaître les formats d’image qui ont plusieurs images, consultez Comment récupérer les images d’une image pour accéder à chaque image de l’image.Créez le IWICBitmapClipper à utiliser pour la capture d’image.
IWICBitmapClipper *pIClipper = NULL; if (SUCCEEDED(hr)) { hr = m_pIWICFactory->CreateBitmapClipper(&pIClipper); }
Initialisez l’objet clipper avec les données d’image dans le rectangle donné du cadre bitmap.
// Create the clipping rectangle. WICRect rcClip = { 0, 0, uiWidth/2, uiHeight/2 }; // Initialize the clipper with the given rectangle of the frame's image data. if (SUCCEEDED(hr)) { hr = pIClipper->Initialize(pIDecoderFrame, &rcClip); }
Dessinez ou traitez l’image clippée.
L’illustration suivante illustre la capture d’image. L’image d’origine à gauche est de 200 x 130 pixels. L’image à droite est l’image d’origine clippée dans un rectangle défini comme
{20,20,100,100}
.
Voir aussi