CGImageCreateWithImageInRect вызывает искажение - PullRequest
1 голос
/ 27 августа 2010

Я использую CGImageCreateWithImageInRect, чтобы сделать эффект увеличения, и он прекрасно работает, за исключением случаев, когда я приближаюсь к краям моего обзора. В этом случае отсечение приводит к искажению изображения. Прямо сейчас я беру кусок 72x72 вида, применяю к нему круглую маску, а затем рисую замаскированное изображение и круг сверху.

Когда скопированный фрагмент находится рядом с краем вида, он оказывается меньше 72х72 из-за отсечения, а затем, когда он рисуется в увеличительном стекле, он растягивается.

Например, когда точка касания находится близко к левому краю, я хотел бы создать изображение, в котором левая часть заполнена сплошным цветом, а правая половина содержит часть увеличенного вида. Затем примените маску к этому изображению и добавьте наложение сверху.

Вот что я сейчас делаю. imageRef - изображение, которое увеличивается, маска - круглая маска, а оверлей - круг, чтобы отметить края увеличенной области.

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 голосов
/ 27 августа 2010

Я решил это с помощью CGBitmapContextCreate () для создания растрового контекста. Затем я нарисовал захваченную область в меньшую область этого контекста и создал из нее изображение с помощью CGBitmapContextCreateImage (). Это был недостающий фрагмент головоломки.

...