5
- (UIImage *)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect
{
    CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);
    UIImage *cropped = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    return cropped;
}

私はこのコードを使用しています。いくつかの解決策を教えてください。よろしくお願いします

4

1 に答える 1

4

CGImageCreateWithImageInRect画像の向きを正しく処理しません。巨大な switch/case ステートメントを含む奇妙で素晴らしいクロッピング テクニックがネット上にたくさんあります (Ayaz の回答のリンクを参照してください) UIImage。核心的な詳細があなたのために世話をされます。

次の方法は、私が遭遇したすべてのケースで取得できるほど簡単で機能します。

- (UIImage *)imageByCropping:(UIImage *)image toRect:(CGRect)rect
{
    if (UIGraphicsBeginImageContextWithOptions) {
        UIGraphicsBeginImageContextWithOptions(rect.size,
                                               /* opaque */ NO,
                                               /* scaling factor */ 0.0);
    } else {
        UIGraphicsBeginImageContext(rect.size);
    }

    // stick to methods on UIImage so that orientation etc. are automatically
    // dealt with for us
    [image drawAtPoint:CGPointMake(-rect.origin.x, -rect.origin.y)];

    UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return result;
}

opaque透過性が必要ない場合は、引数の値を変更できます。

于 2012-09-05T12:52:39.280 に答える