1

我正在使用 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);
4

1 回答 1

0

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

于 2010-08-27T12:02:41.663 回答