Skip to content

Commit 7eac419

Browse files
committed
Migrate from deprecated RenderScript API to RenderScript Intrinsics Replacement Toolkit
1 parent 3742ce2 commit 7eac419

File tree

4 files changed

+9
-38
lines changed

4 files changed

+9
-38
lines changed

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ allprojects {
1414
repositories {
1515
google()
1616
mavenCentral()
17+
maven("https://jitpack.io")
1718
}
1819
}

sample/src/main/java/com/commit451/coiltransformations/sample/MainViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class MainViewModel(application: Application) : AndroidViewModel(application) {
3838
transformation = GrayscaleTransformation()
3939
)
4040
images += Image(
41-
transformation = BlurTransformation(context)
41+
transformation = BlurTransformation()
4242
)
4343
images += Image(
4444
transformation = MaskTransformation(context, R.drawable.mask_starfish)

transformations/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,5 @@ android {
3232
dependencies {
3333
api("io.coil-kt:coil-base:${project.coilVersion}")
3434
api("androidx.core:core-ktx:1.7.0")
35+
implementation("com.github.android:renderscript-intrinsics-replacement-toolkit:598692ab79")
3536
}
Lines changed: 6 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,31 @@
1-
@file:Suppress("unused")
2-
31
package com.commit451.coiltransformations
42

5-
import android.content.Context
63
import android.graphics.Bitmap
74
import android.graphics.Paint
8-
import android.renderscript.Allocation
9-
import android.renderscript.Element
10-
import android.renderscript.RenderScript
11-
import android.renderscript.ScriptIntrinsicBlur
12-
import androidx.annotation.RequiresApi
135
import androidx.core.graphics.applyCanvas
146
import androidx.core.graphics.createBitmap
157
import coil.size.Size
168
import coil.transform.Transformation
179
import com.commit451.coiltransformations.Util.safeConfig
10+
import com.google.android.renderscript.Toolkit
1811

1912
/**
2013
* A [Transformation] that applies a Gaussian blur to an image.
2114
*
22-
* @param context The [Context] used to create a [RenderScript] instance.
2315
* @param radius The radius of the blur.
2416
* @param sampling The sampling multiplier used to scale the image. Values > 1
2517
* will downscale the image. Values between 0 and 1 will upscale the image.
2618
*/
27-
@RequiresApi(18)
28-
class BlurTransformation @JvmOverloads constructor(
29-
private val context: Context,
30-
private val radius: Float = DEFAULT_RADIUS,
19+
data class BlurTransformation @JvmOverloads constructor(
20+
private val radius: Int = DEFAULT_RADIUS,
3121
private val sampling: Float = DEFAULT_SAMPLING
3222
) : Transformation {
3323

3424
init {
35-
require(radius in 0.0..25.0) { "radius must be in [0, 25]." }
25+
require(radius in 1..25) { "radius must be in [1, 25]." }
3626
require(sampling > 0) { "sampling must be > 0." }
3727
}
3828

39-
@Suppress("NullableToStringCall")
4029
override val cacheKey = "${BlurTransformation::class.java.name}-$radius-$sampling"
4130

4231
override suspend fun transform(input: Bitmap, size: Size): Bitmap {
@@ -50,31 +39,11 @@ class BlurTransformation @JvmOverloads constructor(
5039
drawBitmap(input, 0f, 0f, paint)
5140
}
5241

53-
var script: RenderScript? = null
54-
var tmpInt: Allocation? = null
55-
var tmpOut: Allocation? = null
56-
var blur: ScriptIntrinsicBlur? = null
57-
try {
58-
script = RenderScript.create(context)
59-
tmpInt = Allocation.createFromBitmap(script, output, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT)
60-
tmpOut = Allocation.createTyped(script, tmpInt.type)
61-
blur = ScriptIntrinsicBlur.create(script, Element.U8_4(script))
62-
blur.setRadius(radius)
63-
blur.setInput(tmpInt)
64-
blur.forEach(tmpOut)
65-
tmpOut.copyTo(output)
66-
} finally {
67-
script?.destroy()
68-
tmpInt?.destroy()
69-
tmpOut?.destroy()
70-
blur?.destroy()
71-
}
72-
73-
return output
42+
return Toolkit.blur(output, radius)
7443
}
7544

7645
private companion object {
77-
private const val DEFAULT_RADIUS = 10f
46+
private const val DEFAULT_RADIUS = 10
7847
private const val DEFAULT_SAMPLING = 1f
7948
}
8049
}

0 commit comments

Comments
 (0)