全てのソースコードはこちら ▼ テスト用のカメラ処理はこちら 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の最新記事】
- Android Studio で Twitter4J で ListView に検索結果を表示する
- Android Studio で Twitter4J で画像付きツイート
- 内部ストレージを起点とした画像データの処理 / Android
- バグ : Android Studio 2.2.2 で、spinnerMode を dialog に設定すると app:spinnerMode となってしまいます
- ListView + カスタム ArrayAdapter + ViewSwitcher + Firebase API + Data Binding : 更新処理 / Android Studio
- Firebase storage に画像をアップロードする。1) ギャラリーから、2) 実行中の画面 / Android
- Android : 画像関連のテスト用カメラアプリ
- Firebase storage の画像を ファイルとしてダウンロードして ギャラリーに保存する( ImageView にも表示する ) / Android
- Firebase storage の画像の URL を取得して、通常と同様に Stream でダウンロードして ImageView に表示する / Android
- Firebase storage の画像をメモリに直接ダウンロードして ImageView に表示する / Android
- Android : Firebase の データを REST API の PUT コマンドで更新する
- Firebase API + Android Studio : Database のデータを Java に取得する方法は3通りあります。(orderByChild 使う場合は、getChildren ..
- Android : Data Binding + Firebase API で ListView にデータを表示する
- Firebase API + Android Studio : Database 処理の基本設定
- Android Studio 2.2 で新規プロジェクトを作成すると『Could not reserve enough space for 1572864KB object heap』というエラーが出..
- Firebase API + Android Studio : Database にデータを保存は単純で、DatabaseReference の setValue メソッドを使用します