I love iPhone, Android, Cocos2d-x
[iPad] フォトライブラリで編集した画像を元にオリジナル画像を再編集
なんか分かりにくいタイトルになってしまった。何がしたいかというと、iPad で UIImagePickerController を使用してフォトライブラリから写真を読み込む際に allowsEditing = YES にしておくと写真を選択後に画像の位置とスケールを指定することができます。UIImagePickerControllerEditedImage でその編集後の UIImage を取り出せるのですが、このサイズが 320 x 320 (厳密にはちょっと違った)で帰ってきます。これでは iPad で表示するには小さすぎます。そこで、元画像を編集後のデータを元に再度トリミングすることにしました。
ポイントは UIImagePickerControllerCropRect で編集した画像の位置とサイズが NSValue で取得できるので getValue: メソッドで CGRect の値を取得します。あとはそのデータを元に画像をトリミングすれば OK です。
- (IBAction) tapPhoto:(id)sender {
UIImagePickerController* picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
picker.delegate = self;
picker.allowsEditing = YES;
self.popOver = [[UIPopoverController alloc] initWithContentViewController:picker];
self.popOver.delegate = self;
[self.popOver presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
[picker release];
}
#pragma mark ImagePickerController Delegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
[self.popOver dismissPopoverAnimated:YES];
[self.popOver release];
// get crop rect
CGRect rect;
[[info objectForKey:UIImagePickerControllerCropRect] getValue:&rect];
// original image
UIImage* oImage = [info objectForKey:UIImagePickerControllerOriginalImage];
CGImageRef imageRef = CGImageCreateWithImageInRect([imageToCrop CGImage], rect);
// cropped image
UIImage *cropped =[UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
}
関連する投稿
One comment
コメントをどうぞ
Additional comments powered by BackType
2stagnant…
…