代码之家  ›  专栏  ›  技术社区  ›  TimK

CGImageCreateWithImageInRect导致失真

  •  1
  • TimK  · 技术社区  · 15 年前

    我用CGImageCreateWithImageInRect做了一个放大效果,它工作得很漂亮,除非我靠近我的视野边缘。在这种情况下,剪裁会导致图像失真。现在,我抓取一个72x72的视图块,应用一个圆形遮罩,然后绘制遮罩图像,在上面画一个圆。

    例如,当接触点靠近左边缘时,我想创建一个图像,其中左半部分用纯色填充,右半部分包含被放大的部分视图。然后将遮罩应用于该图像并在顶部添加覆盖。

    这就是我现在要做的。imageRef是被放大的图像,mask是一个圆形的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 回复  |  直到 15 年前
        1
  •  0
  •   TimK    15 年前

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