• ベストアンサー

Android端末でBitmap画像そのまま保存

AndroidSDKを使ってソフトの開発をしています。Bitmap形式の画像をそのまま圧縮しないでファイルに保存しようとしているのですが、その方法が分かりません。 今やろうとしていることは、Bitmap画像をそのままバイナリデータに変換して、バイナリデータとして保存しようとしているのですが、バイナリデータに変換する方法が分かりません。どなたか、知っている方がいましたら、教えてください。 Webを検索すると、JPEGなどに変換してからファイル書き込みをする方法が見つかりますが、変換なしの方法は見当たりません。ぜひ教えて頂ければ幸いです。

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

  • ベストアンサー
  • XBG
  • ベストアンサー率60% (493/820)
回答No.2

失礼しました、java環境ですとBitmap.compressがあります。 http://isann.blog2.fc2.com/blog-entry-239.html 特に言及しなかったのですが、Bitmapクラスで扱う画像データは生の画像データで、ファイル形式のBMPとは異なります。 上のページは、ファイルフォーマットを指定してOutputStreamに「流し込む」操作です。 残念ながらBitmap.CompressFormatに定数指定されているのはJPEGとPNGしかありません。 JPEGだと非可逆圧縮のため画質が少々劣化するので、画質優先ならPNGを選択しましょう。 もう一つの注意点は、アプリケーションが読み書きできるディレクトリが限られると言うことです。 一つ目は/data/data/<パッケージ名>/files/で、各パッケージの「データ」として扱われます。この領域は(root化後に書き込み可能でマウントしない限り)他のパッケージからはアクセスできないようになっています。 二つ目は、/sdcard下または/mnt/sdcard下です。ここにはあらゆるアプリケーションがアクセスできます。この2ディレクトリは連動しているため、通常区別する必要はありません。 三つ目は外部ストレージですが、これは端末メーカーによってパスが異なりますのできちんとこのページを参考に指定してください。 http://y-anz-m.blogspot.jp/2010/08/android_31.html また、SHARP端末等外部ストレージの内容が/sdcard下に混合して扱われてしまう場合があります。

golden-life
質問者

お礼

また直ぐに、ご回答を頂き有難うございます。 Bitmapをそのまま保存する方法が無ければ、Bitmap.compressを使ってPNG形式で保存するのが良さそうですね。 それにしても、Bitmapのような構造体(Javaではクラスですか)のデータを、そのままフィル保存する方法があると便利なんですが。どうしてそのような機能が無いのか不思議に思います。

その他の回答 (1)

  • XBG
  • ベストアンサー率60% (493/820)
回答No.1

何か勘違いをされているようですが、JPEGもBitmapも元々バイナリデータです。 従って「バイナリに変換」ではなく「バイナリ(正確にはバイトデータ)の抽出」というのが正しいです。 ただし、単純なファイルの入出力であれば、BitmapクラスのコンストラクタやSaveメソッドで実現可能です。 Saveメソッドでは保存するファイル形式も指定できますが、端末によってGDI+エンコーダの有無が異なってきますので、殆どの端末で扱うことのできるJPEGでの保存がサンプルコードとして取り上げられることが多いようです。

参考URL:
http://www.atmarkit.co.jp/fdotnet/dotnettips/020savebmp/savebmp.html
golden-life
質問者

補足

早速のご回答有難うございます。 参考に示していただいたURLのWEBに関しては、質問を投稿する前に試してみました。このWEBに載っている方法は、.NETのC#版のやり方を示したものです。.NETC#にはSaveという便利なメソッドが用意されています。ところが、AndroidSDKには残念ながら、Saveがありません。 Bitmapデータをそのままファイリングして、後でそのファイルを同じプログラムで読み込むことをしたい。単にこれだけなのですが、Androidのファイルでは簡単にできないのでしょうか。そこで止む無く、バイナリ変換ではなく抽出(ご指摘有難うございます)をして、バイナリファイルに書き込むことができないかと考えたわけです。 何か良い方法があれば、また教えていただければありがたいのですが。