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)

normal.png

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からリサイズなどができる。

resize.png

加工

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で読み込んだ画像の加工ができる。

preprocess.png

こんな感じに円形にクリッピングなど。


使用した画像

Charlesjsharp / Cassius blue (Leptotes cassius theonus), Cuba / CC BY-SA 4.0
File:Cassius blue (Leptotes cassius theonus) underside.JPG - Wikimedia Commons

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.