Ausschneiden einer Bitmapquelle
In diesem Thema wird veranschaulicht, wie Sie einen rechteckigen Teil einer IWICBitmapSource mithilfe einer IWICBitmapClipper-Komponente abrufen.
So schneiden Sie eine Bitmapquelle ab
Erstellen Sie ein IWICImagingFactory-Objekt , 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 Imagedatei 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 );
Rufen Sie den ersten IWICBitmapFrameDecode des Bilds ab.
// Retrieve the first bitmap frame. if (SUCCEEDED(hr)) { hr = pIDecoder->GetFrame(0, &pIDecoderFrame); }
Das JPEG-Dateiformat unterstützt nur einen einzelnen Frame. Da es sich bei der Datei in diesem Beispiel um eine JPEG-Datei handelt, wird der erste Frame (
0
) verwendet. Bildformate mit mehreren Frames finden Sie unter Abrufen der Frames eines Bilds für den Zugriff auf jeden Frame des Bilds.Erstellen Sie den IWICBitmapClipper , der für die Bildausschnitterstellung 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 Bildausschnitterstellung veranschaulicht. Das originale Bild auf der linken Seite ist 200 x 130 Pixel. Das Bild auf der rechten Seite ist das ursprüngliche Bild, das an ein Rechteck gekappt ist, das als
{20,20,100,100}
definiert ist.
Weitere Informationen