iPhoneカメラアプリ開発で合成写真の表示を実現する方法とは?

このQ&Aのポイント
  • iPhoneカメラアプリ開発で、写真の上にデフォルト画像を重ねて撮影・保存する機能を実装する方法を解説します。
  • 現在の撮影画面では、デフォルト画像+写真が表示されますが、撮影後にデフォルト画像が消えてしまい、写真のみが残ります。
  • また、保存されるのも写真のみで、デフォルト画像は保存されません。本アプリのソースコードを使えば、撮影画面にデフォルト画像を表示できるようになります。
回答を見る
  • ベストアンサー

iphoneカメラアプリ開発、合成写真の表示

iphoneカメラアプリ開発、合成写真の表示 つくりたい機能は、カメラで写真を取る際に、予め用意してあるデフォルト画像(ひこにゃん)を写真の上から重ねて撮影・保存できる機能です。つまり、自分で取った顔写真などにデフォルト画像を合成するアプリです。 現在、撮影画面ではデフォルト画像+写真が表示するのですが(添付画像)、撮影後に「使用」を選択すると、デフォルト画像が消えて、カメラで取った写真だけが残ってしまします。 保存できるのも写真のみで、デフォルト画像は保存できません。 ソースコードは、基本的な参考書に載ってるトイカメラなどを、下記の部分のみ変えて撮影画面にデフォルト画像を表示できるようにしてあります。 【本アプリ】 - (IBAction)doCamera:(id)sender { NSLog(@"カメラ"); if( [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){ UIImageView *aimageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"test.png"]]; imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; imagePicker.cameraOverlayView = aimageView; [self presentModalViewController:imagePicker animated:YES]; [imagePicker setDelegate:self]; [imagePicker setAllowsEditing:YES]; [imagePicker.cameraOverlayView release]; } } よろしくお願いします。

  • Mac
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • banbutsu
  • ベストアンサー率100% (1/1)
回答No.2

No.1の補足への回答です 実装の仕方は、参考になさっているトイカメラなどのソースコードで、トイカメラっぽい画像にするために画像の加工を行っているものと思います。その位置で合成処理を行えばいいでしょう。 簡単な流れを書くと、 ・UIGraphicsBeginImageContext()やUIGraphicsBeginImageContextWithOptions()で画像作成用のコンテキストを作成する ・コンテキストにカメラで撮影した画像を描画する ・合成する画像を描画する(合成する画像は透明度を持ったPNG画像で用意しておく) ・コンテキストからUIGraphicsGetImageFromCurrentImageContext()でUIImageを生成する ・UIGraphicsEndImageContext()でコンテキストを破棄する ・先ほど生成したUIImageを保存しつつ画面に表示する こんな感じでしょう。

87doubl
質問者

お礼

ありがとうございます!

その他の回答 (2)

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.3

下のリンクで勉強して、カメラアプリ作成の基礎をマスターしましょう。 カメラアプリの作り方 http://news.mynavi.jp/column/iphone/001/index.html 画像のピクセル処理まで説明があります。 ピクセル処理ができないと、画像の合成はできません。(できなくはないかもしれないが……) けっこう難度の高い処理だと思いますよ。

87doubl
質問者

お礼

基礎から勉強します。ありがとうございます。

  • banbutsu
  • ベストアンサー率100% (1/1)
回答No.1

iPhoneのカメラ機能で生成される写真画像は、iPhoneの画面を経由して取り込まれるわけではありません。画面に表示されるのはプレビューに過ぎません。また、cameraOverlayViewは、Appleとしては独自のUIを実装するために提供しているものです。 従って、cameraOverlayViewを利用して画面上で重ねて表示させたとしても、撮影した時にその画像は合成してもらえませんよ。 撮影した画像と自前の画像の合成は、あくまでも自力(アプリ側)で実装しなくてはいけません。

87doubl
質問者

お礼

ご回答ありがとうございます。 >撮影した画像と自前の画像の合成は、あくまでも自力(アプリ側)で実装しなくてはいけません。 そのようですね。実はその点をお伺いしたくて投稿させて頂きました。(わかりずらくてすみません) よろしければ、どのように実装すればいいのか教えて頂けないでしょうか。どうぞよろしくお願いします。

関連するQ&A

  • iPhoneアプリプログラミング

    iPhoneアプリ開発超初心者です。 「逆引きObjective-C for iPhoneアプリ」というサイトの中の http://www.objectivec-iphone.com/UIKit/UIImageView/UIImageView.html に、画像を表示するサンプルプログラムとして - (void)viewDidLoad { [super viewDidLoad]; // UIImageViewの初期化 CGRect rect = CGRectMake(10, 10, 250, 250); UIImageView *imageView = [[UIImageView alloc]initWithFrame:rect]; // 画像の読み込み imageView.image = [UIImage imageNamed:@"lena.png"]; // UIImageViewのインスタンスをビューに追加 [self.view addSubview:imageView]; } が紹介されているのですが、 メソッド - (IBAction)executeView:(id) sender {   // 画像表示 } の中で、画面上の特定位置への画像表示を指定する方法を教えてください。 上記のサンプルプログラムとメソッドを組み合わせるようなことをするのでしょうか? なにぶん超初心者で的外れなことを言っているかもしれませんが、よろしくお願いします。

  • Xcode4のエラー(IPhoneアプリ)

    はじめまして。 IPhoneのアプリ作成に挑戦しています。 Xcode4のバージョンは 4.5.1です。 【はじめてのXcode4プログラミング】という参考書でIPhoneのカメラアプリを作る章があり、写真ライブラリから選択した画像を表示できるとのことです。 しかし、XcodeでRun(実行)すると、ViewController.mの最後2行【UIImage *originalImage =[info objectForkey:UIImagePickerControllerOriginalImage];】が赤くなり、【’dismissModalViewControllerAnimated’is deprecated: first deprecated in iOS 6.0】というエラー表示がでます。 全体のコードは下記の通りです。 ネットで調べてみましたが、解決方法がわかりません。 先に進めず困っています。 どうか解決方法を教えてください。 よろしくお願い致します。 ●ViewController.h// // ViewController.h // CameraApp // #import @interface ViewController : UIViewController - (IBAction)pressCameraButton:(id)sender; @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end ●ViewController.m // // ViewController.m // CameraApp // #import “ViewController.h” @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)pressCameraButton:(id)sender { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [self presentModalViewController:picker animated:YES]; } - (void)imagePickerController:(UIImagePickerController*)Picker didFinishPickingMediaWithInfo:(NSDictionary*)info { [self dismissModalViewControllerAnimated:YES]; UIImage *originalImage = [info objectForkey:UIImagePickerControllerOriginalImage]; self.imageView.image = originalImage; } @end

  • iphone4でカメラで撮影した写真を管理するには?

    iphone4でカメラで撮影した写真を管理するには? iphone4で撮影した写真についていくつか質問があります。使いこなしてるカメラを活用しているユーザー様教えてください。 ・撮った写真って”写真”をタップした後に表示される”カメラロール”に入りますが、そこの画面にフォルダって作れないのでしょうか? 撮影した後にカメラロールから振り分けたり、撮影する直前にこれから撮るものは「猫」や「BBQ」などフォルダ分けをしてから撮影など、もしくはカレンダー表示も出来たらとても助かります。 そのようなアプリがあるのならば教えてください! ・撮った写真をアプリでロモ風やポラ風にするものがありますが、いじる前の写真に上書きで保存という機能は基本的に無いのでしょうか? ・撮影した写真はどうやってバックアップするのですか?itunesで同期している時にどこかに既に保存されているのでしょうか? もしパソコンに既に同期時に保存されているならば、iphone本体で写真を全て消して同期した場合パソコンの写真も消えてしまうのですか? ご教授よろしくお願いします。

  • iOS開発:撮影後の写真を写真アプリで開く

    iOS開発初心者です。現在、Objective-Cでカメラアプリを開発しています。 iOS 8標準のカメラアプリでは、撮影後、画面の左下にサムネイルが表示され、 そのサムネイルをタップすると、カメラロールに保存された写真を、標準の写真アプリで開けます。 このような機能を、自分のアプリにも実装したいと考えているのですが、上手くいきません。 AlAssetsLibraryを使用してカメラロールに保存はできました。 UIDocumentInteractionControllerに、保存時に取得したassetURLを使用して、写真アプリを起動しようとしたのですが、UIDocumentInteractionControllerではassetURLでは開けないようです。FileURLでないと駄目なようです。 iOS標準のカメラアプリでは、どのようなアプローチで、サムネイルをクリックして写真アプリを起動しているのでしょうか? どなたか、ご存知のかた、または推測できるかた、ご教授ください。 また、同等の機能を実装する方法をご存知でしたら、教えてください。 ちなみに、撮影した写真をアプリで加工し、EXIF情報を追加する必要があるので、AlAssetsLibraryは必須です。 よろしくお願いします。

  • 【iPhoneアプリ開発】御教えください。

    はじめまして。 butumechaと申します。 iPhoneアプリ開発で使用されるObjectiveC言語についてお聞きしたい事があります。 IBOutlet UIImageViewで指定した4つの画像がございます。 IBActionでタッチされたらそのIBOutletのイメージ画像をランダムで表示させたいのですが、 どのようなコードを打てばよろしいでしょうか? またhiddenを活用してランダムに表示させるような事ができるのであればそれも教えて頂きたいです。 ご教授して頂ければ幸いです。 よろしくお願い致します。

  • カメラアプリはありませんか?

    撮影して、保存するだけのアンドロイド用のカメラアプリを探してます。 カメラアプリで探しても、画像を加工したり、整理するものばかりで、見つけられませんでした。

  • iPhoneアプリ作成時のXcodeのエラー

    はじめまして。 iPhoneのアプリ作成に挑戦しています。 Xcode4のバージョンは 4.5.1です。 【はじめてのXcode4プログラミング】という参考書でIPhoneのカメラアプリを作る章があり、写真ライブラリから選択した画像を表示できるとのことです。 しかし、XcodeでRun(実行)すると、ViewController.mの最後から4行目【UIImage *originalImage = [info objectForkey:UIImagePickerControllerOriginalImage];】が赤くなり、【No visible @interface for 'NSDictionary' declares the selector 'objectForkey'】というエラー表示がでます。 全体のコードは下記の通りです。 ネットで調べてみましたが、解決方法がわかりません。 先に進めず困っています。 どうか解決方法を教えてください。 よろしくお願い致します。 ●ViewController.h// // ViewController.h // CameraApp // #import @interface ViewController : UIViewController - (IBAction)pressCameraButton:(id)sender; @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end ●ViewController.m // // ViewController.m // CameraApp // #import “ViewController.h” @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)pressCameraButton:(id)sender { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [[self presentViewController:picker animated:YES completion:nil];} - (void)imagePickerController:(UIImagePickerController*)Picker didFinishPickingMediaWithInfo:(NSDictionary*)info { [self dismissViewControllerAnimated:YES completion:nil]; UIImage *originalImage = [info objectForkey:UIImagePickerControllerOriginalImage]; // ↑↑ 上記の行でエラーが出ます self.imageView.image = originalImage; } @end

  • iPhoneアプリ開発 UIViewの表示

    iPhoneアプリ開発初心者です。 ご回答、宜しくお願い致します。 BOOLのフラグでUIViewの表示、非表示の切り替え処理をしたいと 思っているのですが、うまくいきません(泣 何故か、以下の処理Aではうまくいくのですが(処理Aは全く意味のないプログラムですが…)、処理Bでは反応しないのです。 ※self.loadingViewはaddSubviewをした際に、非表示の設定を行なっています。 【処理A】 if(true) { self.loadingView.hidden = NO; NSLog(@"表示"); } else { self.loadingView.hidden = YES; NSLog(@"非表示"); } 【処理B】 if(flg) { // ←ある処理でBOOL型のflgをYES、NOで切り替えてます。 self.loadingView.hidden = NO; NSLog(@"表示"); } else { self.loadingView.hidden = YES; NSLog(@"非表示"); } 処理Bのログを見ると、 「表示」がうつるので確実にtrue内には入っているとは思うのですが、 何故かhidden=NOになってくれません。。泣 これだけの情報で教えてくださいなんて、 情報足りなさすぎと怒られてしまうかもしれません。。 初心者すぎてどこまでのせるべきか分かってなくてすみません>< 助けて下さると、ありがたいです。 宜しくお願い致しますm_ _m

  • 合成写真を作りたい

    こんばんは。 今日、デジカメでライトアップされた【薬師寺の風景】を撮ってきました。 【月】の写真も撮ってきました。 カメラはペンタックスk10dです。 多重露光撮影で薬師寺の風景に月を重ねたものも撮ったのですが 月が明るく映りすぎていて失敗でした。 そこで、【薬師寺の風景】に別に撮影した【月】の写真を貼り付けて 合成写真を作りたいのですが 合成写真ってどうやって作るのでしょう? どなたか教えて下さいませ~

  • iPhone カメラ写真

    iPhoneノーマルカメラにて撮影の写真で 文字がぼやけて読めない時、それを鮮明にできる編集・加工やアプリはありますか