Android P PreviewからImageDecoder
が使えるように。
Android P gives you an easier way to decode images to bitmaps or drawables -- ImageDecoder, which deprecates BitmapFactory.
画像の表示
val uri = Uri.parse("android.resource://${packageName}/drawable/image")
val source = ImageDecoder.createSource(contentResolver, uri)
val bitmap = ImageDecoder.decodeBitmap(source)
imageView.setImageBitmap(bitmap)
drawable
をURIにして読み込む。
リサイズ
val uri = Uri.parse("android.resource://${packageName}/drawable/image")
val source = ImageDecoder.createSource(contentResolver, uri)
val bitmap = ImageDecoder.decodeBitmap(source, { decoder, info, source ->
decoder.setResize(300, 300)
})
imageView.setImageBitmap(bitmap)
decode...
にコールバックを指定すれば、decoderからリサイズなどができる。
加工
val uri = Uri.parse("android.resource://${packageName}/drawable/image")
val source = ImageDecoder.createSource(contentResolver, uri)
val bitmap = ImageDecoder.decodeBitmap(source, { decoder, info, source ->
decoder.setResize(300, 300)
decoder.setPostProcessor { canvas ->
val path = Path()
path.fillType = Path.FillType.INVERSE_EVEN_ODD
path.addCircle((canvas.width/2).toFloat(), (canvas.height/2).toFloat(), (canvas.width/2).toFloat(), Path.Direction.CW)
val paint = Paint()
paint.isAntiAlias = true
paint.color = Color.TRANSPARENT
paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC)
canvas.drawPath(path, paint)
return@setPostProcessor PixelFormat.TRANSLUCENT
}
})
imageView.setImageBitmap(bitmap)
setPostProcessor
で読み込んだ画像の加工ができる。
こんな感じに円形にクリッピングなど。
使用した画像
Charlesjsharp / Cassius blue (Leptotes cassius theonus), Cuba / CC BY-SA 4.0
File:Cassius blue (Leptotes cassius theonus) underside.JPG - Wikimedia Commons