ノンプログラマー・プログラミング・ガイド

ほぼ独学。もはやおっさんになりかかってからプログラミングの勉強開始。HTML、CSS、JavaScript、SQL、PHP、Javaがなんとなく解る。Joomla!とandroidで書いたプログラムを配布中。iPhoneアプリ作りたいからMacくれ(下さい)。

タグ:保存

Androidアプリ内で保存した画像をギャラリーで表示させる方法です。全ては、このチュートリアル(Taking Photos Simply)にかいてあります。


要点だけ
  1. 保存先をパブリックフォルダーのPicturesにする
  2. 保存した画像をAndroidさんに教える

保存先のフォルダーを取得する

保存先のパブリックフォルダーへのパスを取得します。
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

ルートなので、適当に下位のフォルダー名を入れてもいいんじゃないのかと・・・・。


Androidに画像追加を知らせる

	    Intent mediaScanIntent = new Intent("android.intent.action.MEDIA_SCANNER_SCAN_FILE");
	    Uri contentUri = Uri.fromFile(file);
	    mediaScanIntent.setData(contentUri);
	    this.sendBroadcast(mediaScanIntent);


fileは、保存した画像のパスです。


 

画像をAndroidの内部に保存する方法です。ひっかかったのがAndroidさんは、pngやjpgなんかは、Bitmapとして扱えるんですけど、gifは、bitmapとして扱えないみたい・・・。

pngやjpgを保存する

public String saveBitmap(Bitmap image, Context cx){
	String fileName = "filename"; 
	
	//保存先のファイル
	File file = new File(cx.getExternalCacheDir (), fileName);
	FileOutputStream outputStream;
	try {
		//change image scale
		// Bitmap resized =  Bitmap.createScaledBitmap(bmp, 100, 100, false);
	 
	  outputStream = new FileOutputStream(file);
	  image.compress(Bitmap.CompressFormat.PNG, 90, outputStream);
	  
	  outputStream.close();
	} catch (Exception e) {
	  e.printStackTrace();
	}	
	
	return fileName;
}
今書いてるコードから抜き出して、なんとなく書き換えただけなので、凄い適当なメソッドです。外部の一時フォルダーに保存するためにContextを渡してます。

肝となるのは、
image.compress(Bitmap.CompressFormat.PNG, 90, outputStream);
このcompressじゃないのかと。第一引数で画像の拡張子を指定して、第二引数で画質の指定、第三引数に出力するオブジェクトを渡します。また、PNGを指定した場合は、第二引数は意味がありません。





 

このページのトップヘ