pull/1744/head
parent
706a7fd878
commit
d1b3ce8a7b
@ -1,75 +0,0 @@ |
||||
package io.legado.app.help |
||||
|
||||
import android.annotation.TargetApi |
||||
import android.content.Context |
||||
import android.graphics.Bitmap |
||||
import android.os.Build |
||||
import android.renderscript.Allocation |
||||
import android.renderscript.Element |
||||
import android.renderscript.RenderScript |
||||
import android.renderscript.ScriptIntrinsicBlur |
||||
import androidx.annotation.IntRange |
||||
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool |
||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop |
||||
import java.security.MessageDigest |
||||
import kotlin.math.min |
||||
import kotlin.math.roundToInt |
||||
|
||||
|
||||
/** |
||||
* 模糊 |
||||
* @radius: 0..25 |
||||
*/ |
||||
class BlurTransformation( |
||||
context: Context, |
||||
@IntRange(from = 0, to = 25) private val radius: Int |
||||
) : CenterCrop() { |
||||
|
||||
private val rs: RenderScript = RenderScript.create(context) |
||||
|
||||
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) |
||||
override fun transform( |
||||
pool: BitmapPool, |
||||
toTransform: Bitmap, |
||||
outWidth: Int, |
||||
outHeight: Int |
||||
): Bitmap { |
||||
val transform = super.transform(pool, toTransform, outWidth, outHeight) |
||||
//图片缩小1/2 |
||||
val width = (min(outWidth, transform.width) / 2f).roundToInt() |
||||
val height = (min(outHeight, transform.height) / 2f).roundToInt() |
||||
val blurredBitmap = Bitmap.createScaledBitmap(transform, width, height, false) |
||||
// Allocate memory for Renderscript to work with |
||||
//分配用于渲染脚本的内存 |
||||
val input = Allocation.createFromBitmap( |
||||
rs, |
||||
blurredBitmap, |
||||
Allocation.MipmapControl.MIPMAP_FULL, |
||||
Allocation.USAGE_SHARED |
||||
) |
||||
val output = Allocation.createTyped(rs, input.type) |
||||
|
||||
// Load up an instance of the specific script that we want to use. |
||||
//加载我们想要使用的特定脚本的实例。 |
||||
val script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)) |
||||
script.setInput(input) |
||||
|
||||
// Set the blur radius |
||||
//设置模糊半径0..25 |
||||
script.setRadius(radius.toFloat()) |
||||
|
||||
// Start the ScriptIntrinsicBlur |
||||
//启动 ScriptIntrinsicBlur, |
||||
script.forEach(output) |
||||
|
||||
// Copy the output to the blurred bitmap |
||||
//将输出复制到模糊的位图 |
||||
output.copyTo(blurredBitmap) |
||||
|
||||
return blurredBitmap |
||||
} |
||||
|
||||
override fun updateDiskCacheKey(messageDigest: MessageDigest) { |
||||
messageDigest.update("blur transformation".toByteArray()) |
||||
} |
||||
} |
@ -0,0 +1,41 @@ |
||||
package io.legado.app.help.glide |
||||
|
||||
import android.annotation.TargetApi |
||||
import android.graphics.Bitmap |
||||
import android.os.Build |
||||
import androidx.annotation.IntRange |
||||
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool |
||||
import com.bumptech.glide.load.resource.bitmap.CenterCrop |
||||
import io.legado.app.utils.stackBlur |
||||
import java.security.MessageDigest |
||||
import kotlin.math.min |
||||
import kotlin.math.roundToInt |
||||
|
||||
|
||||
/** |
||||
* 模糊 |
||||
* @radius: 0..25 |
||||
*/ |
||||
class BlurTransformation( |
||||
@IntRange(from = 0, to = 25) private val radius: Int |
||||
) : CenterCrop() { |
||||
|
||||
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) |
||||
override fun transform( |
||||
pool: BitmapPool, |
||||
toTransform: Bitmap, |
||||
outWidth: Int, |
||||
outHeight: Int |
||||
): Bitmap { |
||||
val transform = super.transform(pool, toTransform, outWidth, outHeight) |
||||
//图片缩小1/2 |
||||
val width = (min(outWidth, transform.width) / 5f).roundToInt() |
||||
val height = (min(outHeight, transform.height) / 5f).roundToInt() |
||||
val blurredBitmap = Bitmap.createScaledBitmap(transform, width, height, false) |
||||
return blurredBitmap.stackBlur(radius) |
||||
} |
||||
|
||||
override fun updateDiskCacheKey(messageDigest: MessageDigest) { |
||||
messageDigest.update("blur transformation".toByteArray()) |
||||
} |
||||
} |
Loading…
Reference in new issue