如何让我的iphone应用程序的用户通过动态生成的CGPath剪辑UIImage。基本上我在UIImageView上显示一个覆盖的矩形,用户可以移动矩形的4个角来获得4边的多边形。矩形未填充,因此您会在图像上看到四条线。
用户应该可以剪掉4行以外的任何内容。
非常感谢任何帮助或指示。
答案 0 :(得分:1)
如果您已经拥有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);