Если у вас уже есть 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);
, что ваш вопрос? Вам нужна помощь для чего? Рисование прямоугольника? – vfn
Мне нужна помощь для отображения обрезанного UIImage. Прямоугольник нарисован отлично. Я также получаю CGPath правильно каждый раз, когда пользователь перемещает любой из четырех концов прямоугольника. Как я могу использовать это для обрезания фона UIImage? –