Help us understand the problem. What is going on with this article?

Xamarin.Androidで作ったアプリ内で画像を保存する時の話

More than 3 years have passed since last update.

はじめに

Xamarin.Androidでアプリ開発した時、アプリ内で内部ストレージに画像保存する時についての資料があんまりなかったので、忘れないようにの備忘録です。
内部ストレージに画像保存でググると大抵Java.IOとSystem.IOあたりで詰まってしまうので、そんな方向けにも。調べ方が悪かったかもだけど
私自身まだまだ知識不足なところがあるので、細かい指摘などお待ちしております。

どんな時に読んで欲しい

Xamarinで作ったアプリ内で画像保存したい。でもその画像あとでギャラリーアプリとかで見たい。
しかしどうすればいいかわからない。Sysytem.IOとJava.IOとかで積んだ。そんな人向けです。

Xamarinで作ったアプリ内で画像を保存する時

今回はSDカードとかの外部ストレージではなく、内部ストレージに保存するという前提です。
なのでパーミッションWRITE_EXTERNAL_STORAGEを忘れずに。

ImageSave.cs
Bitmap bitmap; //保存したいBitmapが格納済み

//保存する画像の名前を決める
String imgname = "img_";
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddkkmmss");
imgname += sdf.Format(date);
imgname += ".png";

//保存先のパスとか      
ContextWrapper cw = new ContextWrapper(this.ApplicationContext);
Java.IO.File file = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDcim);
Java.IO.File myfile = new Java.IO.File(file, imgname);

//保存
using (var os = new System.IO.FileStream(myfile.AbsolutePath, System.IO.FileMode.Create))
{
 bitmap.Compress(Android.Graphics.Bitmap.CompressFormat.Png, 100, os);
 }


保存する際、画像の名前を決めるコードはここから引用させて頂きました。

保存先のパス

今回保存先をわかりやすいように、内部ストレージのDCIMに保存することにしました。データディレクトリじゃないのは、一応画像処理された画像の保存なのでMyPicture的な所が良かっただけです。
この画像の保存先のパスの取得に詰まりました。

Java.IO.File file = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDcim);

Android.OS.Environment.DirectoryDcimの所でMyPictureとか色々と指定ができると思います。

画像の保存

using (var os = new System.IO.FileStream(myfile.AbsolutePath, System.IO.FileMode.Create))
{
 bitmap.Compress(Android.Graphics.Bitmap.CompressFormat.Png, 100, os);
 }

JavaだとFileOutPutStreamなどでJava.IOとSystem.IOの変換などが出来ないとかで色々と悩まされました。
System.IO.FileStreamというのがあったなんて。。。

参考サイト

android - How to save an image to Internal Storage and then show it on another activity? - Stack Overflow
家の前にかむ犬がいた Intentでアプリ内画像をtwitterとかに送る

ColloidGel
Webサイトは技術的な内容はございませんのであしからず
http://colloidgel.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away