0

顔の湾曲した外観をサポートするために、画像の下部の角を透明にしようとしています。私は次のコードを試しましたが、CGPathAddArcは少し混乱しています。画像に示す赤いコーナーは、透明にしたい領域を定義します

私が持っているもの

透明にしたい赤い線の形

UIGraphicsBeginImageContext(originalImage.size);
[originalImage drawAtPoint:CGPointZero];

CGMutablePathRef testRef = CGPathCreateMutable();
//CGAffineTransform temp = CGAffineTransformMakeRotation(M_PI / 2);
//CGPathAddEllipseInRect(testRef, &temp, CGRectMake(0,0,20,20));
//CGPathAddQuadCurveToPoint(testRef, nil, 20,20, 150, 150);
//CGPathAddCurveToPoint(testRef, NULL, 20, 20, 40, 40, 100, 100);

CGPathMoveToPoint(testRef, NULL, 20, 20);
CGPathAddArc(testRef, NULL, 0, 15, 15, M_PI_2, -M_PI_2, true);

// Clip to the path and clear that portion of the image.
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextAddPath(context,testRef);
CGContextClip(context);
CGContextClearRect(context,CGRectMake(0,0,originalImage.size.width,originalImage.size.height));
    // Build a new UIImage from the image context.
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
4

1 に答える 1

0

コア基盤や低レベルのものに精通していない場合は、簡単に使用[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:]して角の丸い Rectangle を取得できます。

例:

    UIGraphicsBeginImageContext(originalImage.size);
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, originalImage.size.width, originalImage.size.height)
                                               byRoundingCorners:UIRectCornerBottomLeft|UIRectCornerBottomRight
                                                     cornerRadii:CGSizeMake(15, 15)];
    [path addClip];
    [originalImage drawAtPoint:CGPointZero];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
于 2013-06-21T08:02:24.490 に答える