0
0

More than 1 year has passed since last update.

coilライブラリのモノクロ機能の代替実装

Posted at

初めに

今回は、Android実装でよく使われている画像読み込みライブラリの一つであるcoilからモノクロで描画する機能が削除されるとのことで、代替実装を備忘録ついでに残しておこうと思います。

本文

まず、元々coilで使われていたモノクロ機能のコードは下記のurlに飛んでもらえれば確認できます。
https://github.com/coil-kt/coil/blob/1.4.0/coil-base/src/main/java/coil/transform/GrayscaleTransformation.kt
coil側はこれを基に自分たちで実装してくれれば、画像の加工するための機能自体は決してないから問題なく実装できると言っています。

  • equals
  • hashCode
  • toString
    上記三点は先述したurlにある元のコードと何も変わりませんが、他の部分でエラー3箇所出ると思います。
    まず、元々はcoil側で実装されていたkeycacheKeyという名前に変更されています。
    次にtransformの引数に変更があります。
    最後にinput.safeConfigUnresolved reference: safeConfigになるかと思います。
    以上、3つの理由によりエラーが発生してしまいます。
    逆にそこさえ直してしまえば何の問題もなくこれまで通り利用することができるということです。

コード

実際に動くコードとしては、以下になります。

class GrayscaleTransformation : Transformation {
    override val cacheKey: String
        get() = javaClass.name

    override fun equals(other: Any?) = other is GrayscaleTransformation

    override fun hashCode() = javaClass.hashCode()

    override fun toString() = "GrayscaleTransformation()"
    override suspend fun transform(input: Bitmap, size: Size): Bitmap {
        val paint = Paint(Paint.ANTI_ALIAS_FLAG or Paint.FILTER_BITMAP_FLAG)
        paint.colorFilter = COLOR_FILTER
        val output = createBitmap(input.width, input.height, input.config)
        output.applyCanvas {
            drawBitmap(input, 0f, 0f, paint)
        }

        return output
    }

    private companion object {
        val COLOR_FILTER = ColorMatrixColorFilter(ColorMatrix().apply { setSaturation(0f) })
    }
}

keyに関しては名前を変更するだけなので簡単だとは思います。
transformに関しては不要になった引数を削除し、代わりにcreateBitmapを使ってあげます。
input.safeConfigも修正方法はすごく簡単で代わりにinput.configを使うだけでエラーは解消されます。

最後に

ただurlを基にコピペするだけではないので、備忘録&メモ帳くらいの感覚で記事にさせていただきました。
coilは本当によく使うライブラリなので、今後の自分のためにもなると思いますし、皆さんのお役に立てれば光栄です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0