Beschneiden einer Bitmapquelle
In diesem Thema wird veranschaulicht, wie sie einen rechteckigen Teil einer IWICBitmapSource mithilfe einer IWICBitmapClipper-Komponente abrufen.
So clipen Sie eine Bitmapquelle
Erstellen Sie ein IWICImagingFactory-Objekt, um Windows WIC-Objekte (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; 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 );Abrufen des ersten IWICBitmapFrameDecode des Bilds.
// Retrieve the first bitmap frame. if (SUCCEEDED(hr)) { hr = pIDecoder->GetFrame(0, &pIDecoderFrame); }Das JPEG-Dateiformat unterstützt nur einen einzelnen Frame. Da die Datei in diesem Beispiel eine JPEG-Datei ist, wird der erste Frame (
0) verwendet. Informationen zu Bildformaten mit mehreren Frames finden Sie unter Abrufen der Frames eines Bilds für den Zugriff auf die einzelnen Frames des Bilds.Erstellen Sie den IWICBitmapClipper, der für die Bildbearbeitung verwendet werden soll.
IWICBitmapClipper *pIClipper = NULL; if (SUCCEEDED(hr)) { hr = m_pIWICFactory->CreateBitmapClipper(&pIClipper); }Initialisieren Sie das Clipper-Objekt mit den Bilddaten innerhalb des angegebenen Rechtecks des Bitmaprahmens.
// 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); }Zeichnen oder verarbeiten Sie das abgeschnittene Bild.
In der folgenden Abbildung wird die Bildbearbeitung von Clipping veranschaulicht. Das ursprüngliche Bild auf der linken Seite ist 200 x 130 Pixel. Das Bild auf der rechten Seite ist das ursprüngliche Bild, das auf ein Rechteck abgeschnitten ist, das als definiert
{20,20,100,100}ist.