Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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