イメージを取得する
カメラやアルバムからイメージを取得するにはUIImagePickerControllerを使用する。
// 使用できるか出来ないかの判定は、isSourceTypeAvailableメソッドを使う
if ( [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary] ) {
// UIImageControllerの初期化
UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
/* UIImageControllerで取得できるデータは以下の3つ
*
* SourceTypeCamera : カメラを起動する
* SourceTypePhotoLibrary : フォトライブラリーを開く
* SourceTypeSavedPhotosAlbum : (カメラがあるiPhoneは)カメラロールから選択する
*/
[ipc setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
// Delegateをセット
[ipc setDelegate:self];
// NOを設定するとイメージを取得できない
[ipc setAllowsEditing:YES];
// 指定したViewを一番上に表示する
[self presentModalViewController:ipc animated:YES];
// 表示してしまった後はメモリから消去してよい
[ipc release];
}
イメージを表示する
UIImagePickerControllerのイメージを取得した後に呼び出されるデリゲート関数(didFinishPickingMediaWithInfo)に、取得イメージをImageViewに表示する処理を追記する。UIImagePickerControllerをデリゲートする場合は、UIImagePickerControllerDelegateとUINavigationControllerDelegateをヘッダファイルに記述する必要がある。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
// 選択したイメージをUIImageにセットする
UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
// UIImageをImageViewerにセットする
[imageView setImage:image];
// [picker parentViewController]の部分はselfでも良い?
[[picker parentViewController] dismissModalViewControllerAnimated:YES];
}
イメージを保存する
ImageViewに表示されたイメージをフォトアルバムに保存する。イメージを端末内に保存される前にアプリを終了してしまうと、サムネイルだけが保存されイメージが保存されないので、保存終了後にアラートを表示させるようにする。
UIImage *image = [aImageView image];
if ( image != nil ) {
// イメージを保存する
UIImageWriteToSavedPhotosAlbum( image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil );
}
アラート表示部分は以下のように記述する。
// アラートを表示させる部分は、image:didFinishSavingWithError:contextInfo:という書式が必須らしい
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
// アラートを表示する
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"保存終了" message:@"画像を保存しました" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
アプリ内部(アプリのホームディレクトリ内)に画像を保存する場合は、以下のように記述する。
UIImage *image = [aImageView image];
if ( image != nil ) {
// 保存ディレクトリを指定
NSString* docDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
// 保存ディレクトリ+ファイル名を指定
NSString* photoFilePath = [NSString stringWithFormat:@"%@/photo.jpg", docDir];
// 圧縮率を指定しJPEGファイルで保存する
[stringWithFormat(image, 0.7f) writeToFile:photoFilePath atomically:YES];
}
保存ディレクトリの指定には、文字列追加を行うことのできるstringByAppendingPathComponentメソッドを使用する。またファイル名の指定には、フォーマットを指定した文字列記述のできるstringWithFormatを使用する。最後にUIImageJPEGRepresentatio関数によって画像データをNSデータ型に変換したあと指定した保存先に保存を行う。