[xcode]写真を動画にする

このQ&Aのポイント
  • [xcode]写真を動画にする作業をしていますが、エラーが出てしまいました。
  • どうやらUIImageオブジェクトのプロパティ「size」が見つからないエラーが発生しています。
  • また、UIImageのプロパティ「CGImage」も見つからないエラーが発生しています。
回答を見る
  • ベストアンサー

[xcode]写真を動画にする

毎度お世話になっております。 現在、株式会社エムディエヌコーポレーション社が出した『小学生・中学生でもできるiPhoneアプリ開発XcodeでつくるiOSアプリ』を参考にxcodeにて撮影した写真情報を動画にする作業をしています。 この会社が出しているMovieCreatorファイル(http://www.mdn.co.jp/di/book/3214303003/?page=2)をダウンロードし、ビルドをしたのですがこのダウンロードしたファイルにエラーが出てしまいました。 以下エラーです。(計3つ) #import "MovieCreator.h" @implementation MovieCreator /*! 画像の配列から動画を生成する。 @param images 画像の配列 @param path 動画ファイルの出力先 */ - (void)writeImagesAsMovie:(NSArray *)images toPath:(NSString *)path { NSFileManager *fileManager = [NSFileManager defaultManager]; // ファイルを削除する [fileManager removeItemAtPath:path error:nil]; // 最初の画像から動画のサイズ指定する CGSize size = ((UIImage *)images[0]).size; (1)ここでProperty "size" cannot be found in forward class object "UIImage" というエラー _videoWriter = [[AVAssetWriter alloc] initWithURL:[NSURL fileURLWithPath:path] fileType:AVFileTypeQuickTimeMovie error:nil]; NSDictionary *outputSettings = @{ AVVideoCodecKey : AVVideoCodecH264, AVVideoWidthKey : @(size.width), AVVideoHeightKey : @(size.height), }; AVAssetWriterInput *writerInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:outputSettings]; [_videoWriter addInput:writerInput]; AVAssetWriterInputPixelBufferAdaptor *adaptor = [AVAssetWriterInputPixelBufferAdaptor assetWriterInputPixelBufferAdaptorWithAssetWriterInput:writerInput sourcePixelBufferAttributes:nil]; [_videoWriter startWriting]; [_videoWriter startSessionAtSourceTime:kCMTimeZero]; CVPixelBufferRef buffer = NULL; int frameCount = 0; // 次の画像を表示する時間感覚の設定です。 // この数字を小さくすると、早く画像が変わるので滑らかに動きます。 // この数字を大きくすると、かくかくした動画になり、面白いです。 float durationForEachImage = 0.5; int32_t fps = 24; for (UIImage *image in images) { if (adaptor.assetWriterInput.readyForMoreMediaData) { CMTime frameTime = CMTimeMake((int64_t)frameCount * fps * durationForEachImage, fps); buffer = [self pixelBufferFromCGImage:image.CGImage]; (2)ここでProperty "CGImage"cannot be found in forward class object "UIImage"というエラー if (![adaptor appendPixelBuffer:buffer withPresentationTime:frameTime]) { NSLog(@"Failed to append buffer. [image : %@]", image); } if(buffer) { CVBufferRelease(buffer); } frameCount++; [NSThread sleepForTimeInterval:0.05]; } else { [NSThread sleepForTimeInterval:0.1]; } } // 動画生成終了 [writerInput markAsFinished]; [_videoWriter finishWritingWithCompletionHandler:^ { NSLog(@"Finish writing!"); // 動画をカメラロールに保存する UISaveVideoAtPathToSavedPhotosAlbum(path, self, nil, nil); (3)ここでImplicit declaration of function "UISaveVideoAtPathToSavedPhotosAlbum"is invalid inC99 }]; ちなみにコードは先ほどのダウンロードページにあるchap5にあるAsagaoです。 おそらくこのMovieCreatorファイルのコードにミスがあると思うのですが、まだまだ素人のため解決策が全くわかりません。説明不足の点があれば申し訳ございません。どなたかご教授願います。

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

  • ベストアンサー
回答No.1

たぶんMovieCreator.hの #import <Foundation/Foundation.h> を #import <UIKit/UIKit.h> に修正すれば3つともエラーは無くなると思います。 この本はxcode5(SDK7)を対象にしていますが、 xcode6(SDK8)でビルドする場合は、UIKitをincludeするよう 修正しないとエラーになった経験があり、このケースもおそらく それだと思います。 この問題について詳しい解説記事を見つけることはできませんでしたが、 本来UIImageクラスを使うにはUIKit.hをincludeしないといけないけど、 おそらくxcode5まではFoundation.hをincludeすることで、たまたま 内部でUIKit.hのincludeも行われていたのだと思います。 それがxcode6になって、そのたまたま状態が解消されたので ちゃんとUIKit.hの方をincludeしないといけなくなった (正しい状態に強制されるようになった)のだろうと思います。 ちゃんと調べてませんが、たぶんそういう理解でよいと思います。

rin5417
質問者

お礼

お礼が遅くなってしまい申し訳ございません。 ご回答通りにしたところ無事プログラムが動くようになりました! 本当に助かりました! ありがとうございます!!

関連するQ&A

  • xcode iOSでのファイル操作について。

    知っている方、いましたらご教授お願いいたします。 ■現状 xCodeにてios7アプリを開発中で、ボタンが押下されたら テキストファイルへ文字列を保存するものを作っています。 しかしながら、なぜかテキストファイルへの保存がiosシュミレーター上で失敗してしまいます。 ソースコードは以下になります。 ■ソース NSString *homeDir; NSString *docDir; NSString *filePath; NSString *str; NSError *error; //Homeディレクトリのパス取得 homeDir=NSHomeDirectory(); //Documentsディレクトリのパス作成 docDir=[homeDir stringByAppendingPathComponent:@"Documents"]; //ファイルのパス作成 filePath=[docDir stringByAppendingPathComponent:@"test.txt"]; //ファイルのパスを表示 NSLog(filePath); //ファイルへの書き込み str=@"test¥ntest¥ntest"; //testを3行書く //[str writeToFile:filePath atomically:YES]; BOOL result = [str writeToFile:inSaveFilePath atomically:YES encoding:NSUTF8StringEncoding error:&error]; if(result != YES) { NSLog(@"Error:%@", [error localizedDescription]); } ■エラー内容 error NSError * domain: @"NSCocoaErrorDomain" - code: 4 0x08dd4130 なにが悪いのかがさっぱり分からず困惑しています。 サンプルページなどでも構いませんので、ご教授のほどお願いいたします。 以上、よろしくお願いいたします。

  • iPhoneアプリ開発 ファイル書き込み

    iPhoneアプリ開発につきまして、質問させて頂きます。 csvファイルへのデータの出力を試みているのですが上手くできません。 プログラムとログ内容を以下に記述しました。 「abc」と予め書いてある「hoge.csv」ファイルに「stringaaaaaaaaaaa」を書き込み保存しておきたいのですが、上手くいきません。 ログ内容を見る限り、「abc」が読み込めているので、パスは合っていると思っています。また、writeToFileをしてから読み込むと「stringaaaaaaaaaaa」が読み込めるため、どこかには書き込めているような気がします。 しかし、毎回同じ処理をしても、最初に読み込まれるのは「abc」です。「hoge.csv」をテキストエディタで読み込んでも表示されるのは「abc」です。 また、iPhoneシミュレーターで実行した結果は以下のログ内容なのですが、iPhone実機で動作させると、writeToFileを行ったあとでも「abc」が出力されます。 何か原因を思い当たる方、教えて頂ければ幸いです。 - (void)viewDidLoad { [super viewDidLoad]; [self setTitle:@"Stress Application"]; printf("viewdidload"); NSString *text = [[NSString alloc] initWithFormat:@"stringaaaaaaaaaaaaaaa"]; NSString *_path = [[NSBundle mainBundle] pathForResource:@"hoge" ofType:@"csv"]; //atomicallyは補助ファイルを使ってファイルの破損を防止するかどうか NSLog(@"%@",[NSString stringWithContentsOfFile:_path encoding:NSUTF8StringEncoding error:nil]); [text writeToFile:_path atomically:YES encoding:NSUTF8StringEncoding error:nil]; NSLog(@"%@",[NSString stringWithContentsOfFile:_path encoding:NSUTF8StringEncoding error:nil]); NSLog(@"%@",text); } <ログ内容> 2012-10-31 12:35:10.187 ThinkGearTouch[17182:1a903] FinishLaunching viewdidload2012-10-31 12:35:10.204 ThinkGearTouch[17182:1a903] abc 2012-10-31 12:35:10.212 ThinkGearTouch[17182:1a903] stringaaaaaaaaaaaaaaa 2012-10-31 12:35:10.212 ThinkGearTouch[17182:1a903] stringaaaaaaaaaaaaaaa

  • はじめての動画像処理

    はじめての動画像処理 http://www.cqpub.co.jp/shoseki/mycomputer/pic019/ こちらの7章list701.cppのプログラムを使っています。 このプログラムでは、フレームごとに画像の各特徴量を計算し、外部ファイルに結果を出力しています。 buffer(各rgbの値が格納されている)の数値を使って計算をするだけなので、これでは実行結果で表示させる画像は何も変化が得られず、ただフレームごとに画像を描画しているだけです。 私が行いたいことは、bufferに数値を代入して、表示させるビットマップの結果を変えることなのです。 例えば、画像中の白い部分を赤色に変更して結果をフレームごとに表示するなどです。 その場合、 buffer[ij*3]=255 buffer[ij*3+1]=0 buffer[ij*3+2]=0 という代入の表記を書き、その後InvalidateRectで再描画を促して結果を反映させようとしたのですが、 error C2064: 1 引数を取り込む関数には評価されません。 と出てしまいうまく行うことができませんでした。bufferはBYTE型で定義してあったのですが、そこに整数を格納しようとしていることがいけないのでしょうか? 計算結果を反映させた動画の表示方法があれば教えていただきたいです。 動画像処理は初めてでかなり困っています; よろしくお願いします。

  • 動画の圧縮について~フレームの間引き

    約10分の動画をMpeg4に 解像度:320×240 Framerate(fps) :30 Average bitrate(kbps): 1000 という設定でしましたら ファイルサイズが78.5MB 結構奇麗に映ってました。 これのフレームレートを間引きして15にしたんですけど、ファイルサイズも画像の奇麗さもかわりありませんでた。どうしてですか? フレームの間引きって何の意味があるんですか? またこの平均bitrateって高過ぎかな?とも思うんですがどうですか? どれくらいが標準なのかわからなくて困っています。 よろしくお願いします。

  • ニコニコ動画 動画投稿

    ニコニコ動画に動画を投稿するため作業用のBGMを作りました。 最初に画面に画像も何も貼らずただBGMを編集してムービーファイルを保存したらファイルサイズはすごく低く出来たのですが、そのままニコニコ動画に投稿しようとしてもできませんでした。 (ムービーファイルはwmaで出力されたのでwmvに変換して投稿して見てもだめでした) 次に画像を1枚最初の1秒だけ貼って作ってみると最初に作った動画に比べはるかにファイルサイズが大きくなってしまいましたが投稿することはできました。(ムービーファイルはwmvでした。) 画像を貼るとファイルサイズが大きくなってしまうので、画像は何も無しでBGMだけで投稿したいのですができるのでしょうか? 出来ないのであれば、画像とBGMで動画を作成して画質とかはどうでもいいので音質だけそのままでビットレートやフレームレートを下げる事は出来ますか? 教えてくださいm(_ _ )m

  • 画像のアップロードができない

    PHPで携帯サイトを制作中なのですが、メールで画像をアップロードする ことができずに困っております。 具体的にはサーバーにファイル自体はアップロードされるのですが img配下を見ると「ev4rVY(エンコードされたファイル名)」がサーバーにアップされているものの、拡張子がついていないのです。 ▼画像アップロードプログラムPHPソース // ユーザー&認証コードチェック if ($user&&$auth_code==getAuthCode($user['id'], $user['auth_string'])) { // 認証OK // マルチパートの場合のみメールを解析して画像を取得 if (strtolower($structure->ctype_primary) == "multipart") { $images = getImage($structure->parts); } $image_save_path = null; // 画像リストの中から1つだけ画像を取得する foreach ($images as $image) { // コンテンツタイプのチェック if ($image['type'] == 'image/jpeg' || $image['type'] == 'image/gif' || $image['type'] == 'image/png') { // ファイルとして保存 // 一時ファイルパス $temp_path = tempnam('/tmp', 'img_'); if ($temp_path == false) { // error break; } $fp = fopen($temp_path, 'w'); if ($fp == false) { // error break; } fwrite($fp, $image['body']); fclose($fp); // 画像の形式と縦横サイズを取得 list($width, $height, $type) = getimagesize($temp_path); // 認識できる形式であれば、所定のメソッドで開く $imageSource = null; if ($type == IMAGETYPE_GIF) { $imageSource = imagecreatefromgif($temp_path); } else if ($type == IMAGETYPE_JPEG) { $imageSource = imagecreatefromjpeg($temp_path); } else if ($type == IMAGETYPE_PNG) { $imageSource = imagecreatefrompng($temp_path); } // 一時ファイルを消す unlink($temp_path); if ($imageSource) { // ファイル名決定 $path = tempnam($image_dir, ''); //unlink($path); $image_save_path = $path; // 画像をケータイディレクトリへファイル保存 imagejpeg($imageSource, $image_save_path); imagedestroy($imageSource); break; } } } ▲以上ここまで━━━━━━━━━━━━━━━━━━━━━━━━━ 開発環境:CentOS5 PHP Version 5.2.11 ※本を参考に制作しているのですが  本にはGD Graphics をダウンロードした方がよいと  記載がありました。関係ありますでしょうか。 どなたかお分かりになる方がいらっしゃいましたらどうか ご教授いただけませんでしょうか。 お願いいたします。

    • ベストアンサー
    • PHP
  • Swiftについて教えてください

    下記のようにようにサーバにある画像を読み込んでいます。imgフォルダに中にある1.pngを読み込み、配列imageArrayに代入することができたのですが、imgフォルダの中の画像( 1.png~20.png)を全て読み込み配列に入れたいのですが、やり方が分かりません。よろしくお願いします。 // URLリクエストを作る let url = NSURL(string:"http://xxxxxxxxxxxxxxxx/img/1.png") let request = NSURLRequest(URL : url!) var error: NSError? // 同期通信を開始 if let resData:NSData = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: &error){ let image = UIImage(data:resData) self.imageArray.append(image!) }

  • 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

  • PSPの動画のフォルダのイメージは作れますか?

    PSP-1000に動画を入れてみているんですが、几帳面な性格のせいか、どの動画にもイメージをつける修正があります。 ゲームのPVをダウンロードしたら付いてきたJPEGファイルのおかげで動画のイメージは160×120で適用されるということがわかりましたが、どうもフォルダーのイメージは作れません。 音楽と同じようにJPEGファイルを作っても出来ないし、サイトを探しても動画のイメージしか方法が書いてありません。 フォルダのイメージは作れますか。 作れるのでしたら、形式とサイズと名前を教えてください

  • ムービー動画の圧縮方法

    ムービー動画をHotmailで送ろうとしたらエラーになってしまいました。 よく見たらその動画のサイズは53.7MB。 多分サイズが大きすぎて送れなかったのだと思います。 圧縮すれば送れるのかなと思い、zipファイルに入れてみたら53.0であまり変わらず、結局同じようにエラーになってしまいました。 どうしてもこの動画を今日中に友達に送りたいのですが、どうにかしてこの動画のサイズを小さくできませんでしょうか? あまりパソコンに詳しくないため困り果てています。 詳しい方、いらっしゃいましたら力を貸して頂けます様宜しくお願い致します。