2013-08-26 10 views
7

キャプチャされた画像を編集してギャラリーに保存しようとしています。私が作ったUIImagePickerControllerCropRectを使用してUIImagePickerControllerOriginalImageをトリミングすると不正な画像が返される

私は編集可能な四角い部分に画像を保存してギャラリーに保存したいと思います。私は[info objectForKey:@"UIImagePickerControllerEditedImage"]を使って、編集した画像を保存することができます。しかし、これは常に私に次元320x320(iPad Mini)のイメージを返し、画像は質の悪いものです。だから私は、次のコードを使用して、元の画像[info objectForKey:@"UIImagePickerControllerOriginalImage"]をトリミングする計画:

CGRect rect = [[info objectForKey:@"UIImagePickerControllerCropRect"]CGRectValue]; 
UIImage *originalImage=[info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
CGImageRef imageRef = CGImageCreateWithImageInRect([originalImage CGImage], rect); 
UIImage *result = [UIImage imageWithCGImage:imageRef 
             scale:originalImage.scale 
           orientation:originalImage.imageOrientation]; 
CGImageRelease(imageRef); 

は、その後、私は結果画像と編集後の画像([info objectForKey:@"UIImagePickerControllerEditedImage"])の両方を保存しました。両方の画像を比較すると、それらは一致しません。編集して切り取った画像を添付しました。私の最終的な目的は、元の画像を編集可能な四角い部分の画像に切り抜き、良好な画質でギャラリーに保存することです。誰でも正確にここで間違っていると私に教えてくださいと私はこの問題を解決するのを助けることができますか?

ありがとうございます。 cropped Image

Edited Image

+9

私は同様の問題を持っていただけで、レーダーや無効な編集を書いてきました。それから私はキーボードをきれいにしました:p – fzwo

+0

私が解決策についてより具体的にできるかどうかは分かります。私はそれを必要としています。 – CrazyDeveloper

+1

私が言ったように、私はあきらめて、https://bugreport.apple.comにバグレポートを提出しました(内部的には、Appleのバグトラッカーは「レーダー」と呼ばれています)。実際に機能が本当に必要な場合は、それを複製するオープンソースコンポーネントを探すか、自分で作成します。 しかし、私は答えが得られないのはちょっと奇妙だと認めなければなりません。他の人が同じ問題を抱えているかどうかをサイトで調べましたか? – fzwo

答えて

2

私はトリミングがここで間違っていた理由を見つけました。 UIImagePickerControllerOriginalImageによって返される画像は-90度に回転します。回転した画像をトリミングすると、誤ったトリミング画像が返されました。そこで、画像を90度回転させて切り取った。最後に、私は良い品質の切り抜かれたイメージを得ました。以下のコードは私の問題を解決しました。

UIImage *originalImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
    CGRect rect=[[info objectForKey:@"UIImagePickerControllerCropRect"]CGRectValue]; 
    UIImage *rotatedOriginalImage=[originalImage imageRotatedByDegrees:90.0]; 
    CGImageRef imageRef = CGImageCreateWithImageInRect([rotatedOriginalImage CGImage], rect) ; 
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 

画像を回転させるためのコード:

- (UIImage *)imageRotatedByDegrees:(CGFloat)degrees{ 
// calculate the size of the rotated view's containing box for our drawing space 
UIView *rotatedViewBox = [[UIView alloc] initWithFrame:CGRectMake(0,0,self.size.height, self.size.width)]; 
CGAffineTransform t = CGAffineTransformMakeRotation(DegreesToRadians(degrees)); 
rotatedViewBox.transform = t; 
CGSize rotatedSize = rotatedViewBox.frame.size; 


// Create the bitmap context 
UIGraphicsBeginImageContext(rotatedSize); 
CGContextRef bitmap = UIGraphicsGetCurrentContext(); 

// Move the origin to the middle of the image so we will rotate and scale around the center. 
CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2); 

// // Rotate the image context 
CGContextRotateCTM(bitmap, DegreesToRadians(degrees)); 

// Now, draw the rotated/scaled image into the context 
CGContextScaleCTM(bitmap, 1.0, -1.0); 
CGContextDrawImage(bitmap, CGRectMake(-self.size.height/2, -self.size.width/2, self.size.height, self.size.width), [self CGImage]); 

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
return newImage; 
} 
関連する問題