イメージを取得する
カメラやアルバムからイメージを取得するには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データ型に変換したあと指定した保存先に保存を行う。