質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

5554閲覧

iOSのカメラロールに保存する方法

runun

総合スコア305

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2015/04/14 09:49

Unity(C#)で画面のスクリーンキャプチャーを取り、
iOSのカメラロール(写真を保存している場所)に保存させたいのですが、
方法がわかりません。

スクリーンキャプチャーの取り方は、
Application.CaptureScreenshot
で出来ると思うのですが、
アプリのデータ領域に画像が保存されるだけで、
ユーザーが、その画像を閲覧できるようにはならないらしいです。

以下のサイトなどを参考にしましたが、Xcodeの知識が無いため理解が難しかったです。
Unityでスクリーンショットを撮影し、iPhoneのカメラロールに保存する方法。

どなたか方法、または解説だけでもいいので、ご教授いただけないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず、このブログの記事、かなり詳しく書かれていると思いますよ。

Xcodeの知識がないため理解が難しかったとのことですが、どのあたりで躓きましたか?
.mmの拡張子を持った任意のファイルをつくれば良いだけで、Objective-C++のコードは提示されているものをそのまま使えば用を為すはずです。

とはいえコードの意味が分からないと記事を読んでどうにかするのも難しそうなので、やってることを簡単に解説してみます。

lang

1// C言語から呼べる関数として _WriteImageToAlbum を定義します。 2extern "C" void _WriteImageToAlbum (const char* path) 3{ 4 // 引数にとったpathのファイルを読み出し、iOSで使われる画像のオブジェクトを生成します 5 UIImage *image = [UIImage imageWithContentsOfFile:[NSString stringWithUTF8String:path]]; 6 // iOSの写真ライブラリ管理用オブジェクトを生成します 7 ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease]; 8 // この後の処理の結果を受け取るために辞書(ハッシュ)をつくります。 ただ、これはエラーが出ないようにつくってあるだけで使ってないみたいですね。 9 NSMutableDictionary *metadata = [[[NSMutableDictionary alloc] init] autorelease]; 10 // 上でつくった画像オブジェクトを写真ライブラリに保存します 11 [library writeImageToSavedPhotosAlbum:image.CGImage metadata:metadata completionBlock:^(NSURL *assetURL, NSError *error) { 12 // ↓に書いてあるとおり、Unity側にコールバック、処理を戻してやります 13 // 書き込み終了後、Unity側へコールバック。 14 UnitySendMessage("CaptureScreenShot", "DidImageWriteToAlbum", [error.description UTF8String]); 15 }]; 16} 17 18// システムのシャッター音を鳴らす。 19extern "C" void _PlaySystemShutterSound () 20{ 21 // NOTE: 22 // マナーモードや本体音量に左右されずに鳴る。 23 AudioServicesPlaySystemSound(1108); 24}

こんなところで、どうでしょう?

投稿2015/04/16 10:37

AknEp

総合スコア200

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

runun

2015/04/17 05: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 を追加 " したのですが上手くいきません。 原因わかりますでしょうか。
runun

2015/05/11 06:12

丁寧に回答していただいたので放置してすみませんでした。 解決しました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問