SQLの窓

2016年11月07日


カメラを起点とした画像データの処理 / Android

全てのソースコードはこちら
▼ テスト用のカメラ処理はこちら
Android : 画像関連のテスト用カメラアプリ




byte 配列を Bitmap に変換して ImageView に表示する

1) BitmapFactory.decodeByteArray => bitmap
2) imageView.setImageBitmap(bitmap);
// バイト配列を Bitmap に変換( 内容は既に jpeg )
Bitmap image1 = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
// 90度回転
int width = image1.getWidth();
int height = image1.getHeight();
Matrix matrix = new Matrix();
matrix.postRotate (90);
Bitmap image2 = Bitmap.createBitmap (image1, 0, 0, width, height, matrix, true);

// 環境依存(これが無いと落ちるデバイスもある)
imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

// imageView へ表示
imageView.setImageBitmap(image2);


byte 配列を内部ストレージに保存

byte[] data を FileOutputStream で write
// 内部ストレージに保存
FileOutputStream jpg;
try {
	jpg = new FileOutputStream(imagePath);
	jpg.write(data);
	jpg.close();

	// ギャラリーに反映
	MediaScannerConnection.scanFile(
		MainActivity.this,
		new String[]{imagePath},
		new String[]{"image/jpg"},
		null);

} catch (Exception e) {
	e.printStackTrace();
}

保存用の内部ストレージのパスの取得
	// *************************************
	// 保存用内部ストレージパス取得
	// *************************************
	private String buildPath(String folder, String ext) {

		String path = null;

		// 内部ストレージにフォルダを作成
		String TargetRootDir
			= String.format("%s/%s",Environment.getExternalStorageDirectory().getPath() , folder );
		File file = new File(TargetRootDir);
		// ディレクトリ初期作成
		if (!file.exists()) {
			if (file.mkdir() == false) {
				Log.i("lightbox", "ディレクトリを作成できませんでした");
				return path;
			}
		}

		// 画像保存パス
		Calendar cal = Calendar.getInstance();
		SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd_HHmmss");
		path = String.format("%s/%s.%s", TargetRootDir,sf.format(cal.getTime()),ext);

		Log.i("lightbox",path);

		return path;

	}


Firebase よりbyte 配列で画像を取得する

本来は、File か ストリームで取得しますが(メモリ効率)、カメラの画像が byte 配列なので、putBytes でそのままアップロードが可能です。なので、その反対である getBytes のサンプルです

putBytes のサンプルはこちら

Stream でダウンロードして ImageView に表示する
ファイルとしてダウンロードしてギャラリーに保存する
FirebaseStorage storage;
StorageReference storageRef;
StorageReference imageRef;

storage = FirebaseStorage.getInstance();
storageRef = storage.getReferenceFromUrl("gs://freebase-654b7.appspot.com/image");

imageRef = storageRef.child("sworc.png");
// ダウンロード
imageRef.getBytes(MainActivity.MAX_SIZE_BYTE)
	.addOnSuccessListener(new OnSuccessListener<byte[]>() {
		@Override
		public void onSuccess(byte[] bytes) {
			if (bytes != null) {
				Bitmap image = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
				imageView.setImageBitmap(image);
			}
		}
	}).addOnFailureListener(new OnFailureListener() {
	@Override
	public void onFailure(@NonNull Exception e) {
		Log.i("lightbox","データ取得に失敗しました");
		e.printStackTrace();
		Toast.makeText(
			MainActivity.this,
			"Firebase からのダウンロードに失敗しました",
			Toast.LENGTH_LONG)
			.show();
	}
});


関連する資料

ImageView を起点とした画像データの処理 / Android




【2016 Android Studioの最新記事】
posted by lightbox at 2016-11-07 22:25 | 2016 Android Studio | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり