2

で回転を実行していてUIImageView、その一部を切り取って、として保存しようとしていUIImageます。回転しますUIImageViewが、常に写真の同じ部分をトリミングします。したがって、トリミングでは画像の回転は考慮されません。私は何が間違っているのですか?

//rotate image 
CGRect new = CGRectMake(0, 0, 100, 50);
CGAffineTransform rotation = CGAffineTransformMakeRotation(5);
[photo setTransform:rotation];

// crop image 
CGImageRef imageRef = CGImageCreateWithImageInRect([photo.image CGImage], new);
UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 
CGImageRelease(imageRef);

// display crop bounds 
UIView* faceBounds = [[UIView alloc] initWithFrame:new];
faceBounds.layer.borderWidth = 2;
faceBounds.layer.borderColor = [[UIColor redColor] CGColor];
4

2 に答える 2

1

画像データを回転させるには、次のスニペットを使用します。

入力データはinAngle(ラジアン単位の角度)とinImageUIImageインスタンス)です。

これにより、画像コンテキストが作成され、それに変換が適用され、元の画像がそのコンテキストに描画されます。結果の画像データはに保存されresultImageます。

最初の3行は、境界結果の画像フレームの計算を処理します。

UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, inImage.size.width, inImage.size.height)];
rotatedViewBox.transform = CGAffineTransformMakeRotation(inAngle);
CGSize rotatedSize = rotatedViewBox.frame.size;

UIGraphicsBeginImageContext(rotatedSize);
CGContextRef bitmap = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(bitmap, rotatedSize.width / 2.0f, rotatedSize.height / 2.0f);
CGContextRotateCTM(bitmap, inAngle);
CGContextScaleCTM(bitmap, 1.0f, -1.0f);
CGContextDrawImage(bitmap, CGRectMake(-inImage.size.width / 2.0f,
                                      -inImage.size.height / 2.0f,
                                      inImage.size.width,
                                      inImage.size.height),
                                      inImage.CGImage);
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
于 2012-08-21T19:32:43.807 に答える
-1

これは今のところ手遅れですが、今のところ誰かがこれを試すことができます

于 2015-06-29T14:06:03.810 に答える