CGImageCreateWithImageInRect导致失真

时间:2010-08-26 20:02:45

标签: iphone cgimage

我正在使用CGImageCreateWithImageInRect来做放大效果,它工作得非常漂亮,除非我接近视图的边缘。在这种情况下,剪裁会导致图像失真。现在我抓住一个72x72的视图块,对它应用一个圆形蒙版,然后绘制蒙面图像,并在顶部绘制一个圆圈。

当复制的块位于视图边缘附近时,由于剪切,它会小于72x72,然后当它在放大镜中绘制时会被拉伸。

例如,当触摸点靠近左边缘时,我想创建一个左边部分用纯色填充的图像,右半部分包含被放大的部分视图。然后将蒙版应用于该图像并将叠加层添加到顶部。

这就是我现在正在做的事情。 imageRef是放大的图像,mask是圆形遮罩,overlay是圆圈,用于标记放大区域的边缘。

CGImageRef subImage = CGImageCreateWithImageInRect(imageRef, CGRectMake(touchPoint.x - 36, touchPoint.y - 36, 72, 72));
CGImageRef xMaskedImage = CGImageCreateWithMask(subImage, mask);

CGContextRef context = UIGraphicsGetCurrentContext();
CGAffineTransform xform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
CGContextConcatCTM(context, xform);

CGRect area = CGRectMake(touchPoint.x - 84, -touchPoint.y, 170, 170);
CGRect area2 = CGRectMake(touchPoint.x - 80, -touchPoint.y + 4, 160, 160);
CGContextDrawImage(context, area2, xMaskedImage);
CGContextDrawImage(context, area, overlay);

1 个答案:

答案 0 :(得分:0)

我通过使用CGBitmapContextCreate()来创建位图上下文来解决这个问题。然后我将捕获的区域绘制到此上下文的较小区域,并使用CGBitmapContextCreateImage()从中创建了一个图像。那是谜题的缺失部分。