Если у вас уже есть CGPath, вам просто нужно использовать CGContextAddPath
и CGContextClip
, и после этого вы можете нарисовать свой UIImage в этом контексте.
Если вы просто хотите отобразить обрезанное изображение, этот контекст может быть текущим контекстом в методе DrawRect
вашего просмотра.
Если вы действительно хотите получить данные обрезанного изображения, контекст, вероятно, будет CGBitmapContext
, что-то вроде этого:
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
size_t bytesPerPixel = 1;
size_t bytesPerRow = bmpWidth * bytesPerPixel;
size_t bmpDataSize = ( bytesPerRow * bmpHeight);
unsigned char *bmpData = malloc(bmpDataSize);
memset(bmpData, 0, bmpDataSize);
CGContextRef bmpCtx = CGBitmapContextCreate(bmpData, bmpWidth, bmpHeight, 8, bytesPerRow, colorSpace, kCGImageAlphaNone | kCGBitmapByteOrderDefault);
(пример кода для битовой карты серой шкалы, потому что у меня был готов этот код, но нетрудно понять, что нужно изменить для битовой карты RGB.)
затем, чтобы фактически нарисовать обрезанное изображение в контексте растрового изображения, вы должны сделать что-то вроде этого (я пишу этот код из памяти, поэтому могут быть некоторые ошибки):
// theContext could be
// UIGraphicsGetCurrentContext()
// or the bmpCtx
CGContextAddPath(theContext, yourCGPath);
CGContextClip(theContext);
// not sure you need the translate and scale...
CGContextTranslateCTM(theContext, 0, bmpHeight);
CGContextScaleCTM(theContext, 1, -1);
CGContextDrawImage(theContext, rect, yourUIImage.CGImage);