Klipp ut en bitmappskälla
Det här avsnittet visar hur du hämtar en rektangulär del av en IWICBitmapSource- med hjälp av en IWICBitmapClipper- komponent.
Så här klipper du en bitmappskälla
Skapa ett IWICImagingFactory- objekt för att skapa WIC-objekt (Windows Imaging Component).
// Create WIC factory hr = CoCreateInstance( CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&m_pIWICFactory) );
Använd metoden CreateDecoderFromFilename för att skapa en IWICBitmapDecoder från en bildfil.
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 );
Hämta den första IWICBitmapFrameDecode av bilden.
// Retrieve the first bitmap frame. if (SUCCEEDED(hr)) { hr = pIDecoder->GetFrame(0, &pIDecoderFrame); }
JPEG-filformatet stöder endast en enda ram. Eftersom filen i det här exemplet är en JPEG-fil används den första ramen (
0
). Information om bildformat som har flera bildrutor finns i Hämta bildramar för åtkomst till varje bildruta.Skapa IWICBitmapClipper för att använda vid klippning av bild.
IWICBitmapClipper *pIClipper = NULL; if (SUCCEEDED(hr)) { hr = m_pIWICFactory->CreateBitmapClipper(&pIClipper); }
Initiera Clipper-objektet med bilddata i den angivna rektangeln i bitmappsramen.
// 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); }
Rita eller bearbeta den klippta bilden.
Följande illustration demonstrerar bildklippning. Den ursprungliga bilden till vänster är 200 x 130 bildpunkter. Bilden till höger är den ursprungliga bilden klippt till en rektangel som definieras som
{20,20,100,100}
.
Se även