3

画像をマルチポイントクロップしたい(画像参照)。その正常に動作します。私の問題は、画像をトリミングした後、保存する方法UIImageです。CAShapeLayer切り抜き画像に使用しています。マルチポイントクロップに使用する以下のコード。

- (void)multiPointCrop:(CGPoint)cropPoint
{
    UIBezierPath *aPath = [UIBezierPath bezierPath];
    [aPath moveToPoint:cropPoint];

    for (NSString *pointString in self.touchPoints) { 
        if ([self.touchPoints indexOfObject:pointString] != 0)
            [aPath addLineToPoint:CGPointFromString(pointString)];
    }
    [aPath addLineToPoint:cropPoint];
    [aPath closePath];

    [self setClippingPath:aPath andView:self];
    [self setNeedsDisplay];
}

- (void)setClippingPath:(UIBezierPath *)clippingPath andView:(UIView *)view;
{
    if (![[view layer] mask])
        [[view layer] setMask:[CAShapeLayer layer]];

    [(CAShapeLayer*) [[view layer] mask] setPath:[clippingPath CGPath]];
}

UIImageから保存するにはどうすればよいCAShapeLayerですか? これがマルチクロッピングの正しい方法、またはこれを達成するための他の簡単な方法である場合。アイデア、提案、ソース コードなどをお寄せください。どんなことでも大歓迎です。ここに画像の説明を入力

4

1 に答える 1

2

レイヤーをコンテキストにレンダリングし、そのコンテキストから画像を作成してみてください。

CALayer *layer = view.layer;
CGSize s = layer.frame.size;
// create context
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, s.width, s.height,
                                             8, (s.width * 4),
                                             colorSpace, kCGImageAlphaPremultipliedLast);

// flip Y
CGContextTranslateCTM(context, 0.0, s.height);    
CGContextScaleCTM(context, 1.0, -1.0);

// render layer
[layer renderInContext:context];

CGImageRef imgRef = CGBitmapContextCreateImage(context);
// here is your image
UIImage *img = [UIImage imageWithCGImage:imgRef];  

// release owned memory
CGImageRelease(imgRef);
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);
于 2012-10-25T08:20:40.217 に答える