どっこと備忘録群

アウトプットしないとインプットできない私が Androidアプリ開発をメインとした備忘録を載せています。

Bitmapを扱う

通信でイメージファイル(Bitmap)を取得する

BitmapFactory.decodeStream を使えばURLからイメージファイルを取得できる。 ただし、以下に注意が必要。

1. AndroidManifest.xmlに権限(android.permission.INTERNET)を追加する

インターネット通信によりイメージファイルを取得するため、権限の追加が必要。

AndroidManifest.xml<uses-permission android:name="android.permission.INTERNET" />を追加する。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools">
  
  <uses-permission android:name="android.permission.INTERNET" />
  ...
  <application
   ...>
  </application>
</manifest>

2. メインスレッド以外での処理を実行する

通信により画像を取得しているため、メインスレッド以外での実行が必要。

Thread などを利用して、メインスレッドで通信処理を行わないよう制御する。

Thread {
  val imageUrl = /** pngファイルなどのURL */
  val bitmap = URL(imageUrl).openStream().use {
    BitmapFactory.decodeStream(it)
  }
}.start()

Bitmapをローカルに保存する

Bitmap.compress を使う。

val bitmap : Bitmap? = /** どこかから生成・取得したBitmapファイル **/
val file = File(requireContext().filesDir, fileName)
val fileOutputStream = FileOutputStream(file)
bitmap?.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream)

参考

最終更新: 2025.7.30