iOSのカメラロールに保存する方法
解決済
回答 1
投稿 2015/04/14 18:49
- 評価
- クリップ 0
- VIEW 2,061
Unity(C#)で画面のスクリーンキャプチャーを取り、
iOSのカメラロール(写真を保存している場所)に保存させたいのですが、
方法がわかりません。
スクリーンキャプチャーの取り方は、
Application.CaptureScreenshot
で出来ると思うのですが、
アプリのデータ領域に画像が保存されるだけで、
ユーザーが、その画像を閲覧できるようにはならないらしいです。
以下のサイトなどを参考にしましたが、Xcodeの知識が無いため理解が難しかったです。
Unityでスクリーンショットを撮影し、iPhoneのカメラロールに保存する方法。
どなたか方法、または解説だけでもいいので、ご教授いただけないでしょうか。
iOSのカメラロール(写真を保存している場所)に保存させたいのですが、
方法がわかりません。
スクリーンキャプチャーの取り方は、
Application.CaptureScreenshot
で出来ると思うのですが、
アプリのデータ領域に画像が保存されるだけで、
ユーザーが、その画像を閲覧できるようにはならないらしいです。
以下のサイトなどを参考にしましたが、Xcodeの知識が無いため理解が難しかったです。
Unityでスクリーンショットを撮影し、iPhoneのカメラロールに保存する方法。
どなたか方法、または解説だけでもいいので、ご教授いただけないでしょうか。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
評価を下げる理由を選択してください
上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。
checkベストアンサー
+1
まず、このブログの記事、かなり詳しく書かれていると思いますよ。
Xcodeの知識がないため理解が難しかったとのことですが、どのあたりで躓きましたか?
.mmの拡張子を持った任意のファイルをつくれば良いだけで、Objective-C++のコードは提示されているものをそのまま使えば用を為すはずです。
とはいえコードの意味が分からないと記事を読んでどうにかするのも難しそうなので、やってることを簡単に解説してみます。
こんなところで、どうでしょう?
Xcodeの知識がないため理解が難しかったとのことですが、どのあたりで躓きましたか?
.mmの拡張子を持った任意のファイルをつくれば良いだけで、Objective-C++のコードは提示されているものをそのまま使えば用を為すはずです。
とはいえコードの意味が分からないと記事を読んでどうにかするのも難しそうなので、やってることを簡単に解説してみます。
// C言語から呼べる関数として _WriteImageToAlbum を定義します。extern "C" void _WriteImageToAlbum (const char* path){ // 引数にとったpathのファイルを読み出し、iOSで使われる画像のオブジェクトを生成します UIImage *image = [UIImage imageWithContentsOfFile:[NSString stringWithUTF8String:path]]; // iOSの写真ライブラリ管理用オブジェクトを生成します ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease]; // この後の処理の結果を受け取るために辞書(ハッシュ)をつくります。 ただ、これはエラーが出ないようにつくってあるだけで使ってないみたいですね。 NSMutableDictionary *metadata = [[[NSMutableDictionary alloc] init] autorelease]; // 上でつくった画像オブジェクトを写真ライブラリに保存します [library writeImageToSavedPhotosAlbum:image.CGImage metadata:metadata completionBlock:^(NSURL *assetURL, NSError *error) { // ↓に書いてあるとおり、Unity側にコールバック、処理を戻してやります // 書き込み終了後、Unity側へコールバック。 UnitySendMessage("CaptureScreenShot", "DidImageWriteToAlbum", [error.description UTF8String]); }];}// システムのシャッター音を鳴らす。extern "C" void _PlaySystemShutterSound (){ // NOTE: // マナーモードや本体音量に左右されずに鳴る。 AudioServicesPlaySystemSound(1108);}こんなところで、どうでしょう?
投稿 2015/04/16 19:37
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
以下のような回答は評価を下げられます
- 間違っている回答
- 質問の回答になっていない投稿
- 不快な投稿
評価を下げる際はその理由をコメントに書き込んでください。
2015/04/17 14:59
コードの意味は多少理解できました。
C#のスクリプトから呼び出す方法もわかったのですが、
ビルドしたらこんなエラーがでました。
====================
error: ARC forbids explicit message send of 'autorelease'
ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease];
====================
このサイト
http://ktk-kumamoto.hatenablog.com/entry/2015/03/28/212225
を参考に、
"Build Phasesの中のCompile Sources(xx items)を開いて、SocialConnector.mmをダブルクリックして -fno-objc-arc を追加 "
したのですが上手くいきません。
原因わかりますでしょうか。
キャンセル
2015/05/11 15:12
解決しました。
ありがとうございました!
キャンセル