Android開発:内部ストレージにおいて画像を保存・読み込みする,また画像のUriをbitmapに変換する(Kotlinで)

内部ストレージを使う場合特にパーミッションはいらない(はず).ただしcontext(アクティビティなど)が必要.なお必要なimportはこんな感じ:

import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri
import android.os.ParcelFileDescriptor
import java.io.*

保存の場合以下のようになる.

fun saveImgsFromBmp(bmp:Bitmap, outputFileName:String, context: Context) {
try {
val byteArrOutputStream = ByteArrayOutputStream()
val fileOutputStream: FileOutputStream = context.openFileOutput(outputFileName,Context.MODE_PRIVATE)
bmp!!.compress(Bitmap.CompressFormat.JPEG, 100, byteArrOutputStream)
fileOutputStream.write(byteArrOutputStream.toByteArray())
fileOutputStream.close()
}
catch (e:Exception){
e.printStackTrace()
}
}

画像の読み込みの場合以下のようになる.

fun readImgsFromFileName(fileName:String, context: Context): Bitmap? {
try {
val bufferedInputStream = BufferedInputStream(context.openFileInput(fileName))
return BitmapFactory.decodeStream(bufferedInputStream)
}
catch (e:IOException){
e.printStackTrace()
return null
}
}

画像のUriからbitmapを生成する場合以下のようになる.これに関してはUriが内部ストレージのものじゃなくても動くんじゃないかと思う.

fun convertImgsUri2Bmp(activity:Context, uri: Uri): Bitmap? {
val bmp:Bitmap
val parcelFileDesc: ParcelFileDescriptor = activity.getContentResolver().openFileDescriptor(uri, "r")
val fDesc: FileDescriptor
fDesc = parcelFileDesc.getFileDescriptor()
bmp = BitmapFactory.decodeFileDescriptor(fDesc)
parcelFileDesc.close()
return bmp
}