Glideを使用してぼかし画像を表示しようとしていますが、代わりにエラー画像を表示しています。なぜエラー画像を表示するのかわかりません。[〜#〜] url [〜#〜]正常に動作していますが、それでもエラー画像のみが表示されています
これが私のコードです
Glide.with(context)
.load("http://www.gadgetsaint.com/wp-content/uploads/2016/11/cropped-web_hi_res_512.png")
.diskCacheStrategy(DiskCacheStrategy.NONE)
.bitmapTransform(new BlurTransformation(context))
.error(R.drawable.error_image)
.into(imageView);
BlurTransformationクラス:
public class BlurTransformation extends BitmapTransformation {
private RenderScript rs;
public BlurTransformation(Context context) {
super(context);
rs = RenderScript.create(context);
}
@SuppressLint("NewApi")
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
Bitmap blurredBitmap = toTransform.copy(Bitmap.Config.ARGB_8888, true);
// Allocate memory for Renderscript to work with
Allocation input = Allocation.createFromBitmap(
rs,
blurredBitmap,
Allocation.MipmapControl.MIPMAP_FULL,
Allocation.USAGE_SHARED
);
Allocation output = Allocation.createTyped(rs, input.getType());
// Load up an instance of the specific script that we want to use.
ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
script.setInput(input);
// Set the blur radius
script.setRadius(100);
// Start the ScriptIntrinisicBlur
script.forEach(output);
// Copy the output to the blurred bitmap
output.copyTo(blurredBitmap);
toTransform.recycle();
return blurredBitmap;
}
@Override
public String getId() {
return "blur";
}
}
グライドV3の場合、
Glide.with(context).load(imagePath).transform(new BlurTransformation(context))
.into(imageView);
このクラスをぼかし変換に使用しています
public class BlurTransformation extends BitmapTransformation {
private RenderScript rs;
public BlurTransformation(Context context) {
super( context );
rs = RenderScript.create( context );
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
Bitmap blurredBitmap = toTransform.copy( Bitmap.Config.ARGB_8888, true );
// Allocate memory for Renderscript to work with
Allocation input = Allocation.createFromBitmap(
rs,
blurredBitmap,
Allocation.MipmapControl.MIPMAP_FULL,
Allocation.USAGE_SHARED
);
Allocation output = Allocation.createTyped(rs, input.getType());
// Load up an instance of the specific script that we want to use.
ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
script.setInput(input);
// Set the blur radius
script.setRadius(10);
// Start the ScriptIntrinisicBlur
script.forEach(output);
// Copy the output to the blurred bitmap
output.copyTo(blurredBitmap);
toTransform.recycle();
return blurredBitmap;
}
@Override
public String getId() {
return "blur";
}
}
たぶん誰かが役に立つでしょう、最新バージョン-ただグライド:
-アプリのgradleに追加:
implementation("com.github.bumptech.glide:glide:4.9.0") {
exclude group: "com.Android.support"
}
kapt 'com.github.bumptech.glide:compiler:4.9.0'
-レイアウト内:
<ImageView
Android:id="@+id/ivBlurred"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:scaleType="centerCrop"
tools:ignore="ContentDescription" />
-クラスでは、画像を追加します。
Glide.with(context)
.asBitmap()
.load(R.drawable.temp_full_screen_image) // or url
.transform(BlurTransformation(context))
.into(ivBlurred)
-そして最後に:
import Android.content.Context
import Android.graphics.Bitmap
import Android.graphics.Canvas
import Android.graphics.Color
import Android.graphics.Paint
import Android.renderscript.*
import Android.renderscript.RenderScript.RSMessageHandler
import androidx.annotation.ColorInt
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool
import com.bumptech.glide.load.resource.bitmap.BitmapResource
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation
import Java.security.MessageDigest
private const val DEFAULT_DOWN_SAMPLING = 0.5f
class BlurTransformation(private val context: Context) : BitmapTransformation() {
override fun transform(pool: BitmapPool, toTransform: Bitmap, outWidth: Int, outHeight: Int): Bitmap? {
val source: Bitmap = toTransform
val scaledWidth = (source.width * DEFAULT_DOWN_SAMPLING).toInt()
val scaledHeight = (source.height * DEFAULT_DOWN_SAMPLING).toInt()
val bitmap = pool[scaledWidth, scaledHeight, Bitmap.Config.ARGB_8888]
return BitmapResource.obtain(this.blurBitmap(context, source, bitmap, Color.argb(90, 255, 255, 255)), pool)?.get()
}
override fun updateDiskCacheKey(messageDigest: MessageDigest) {
messageDigest.update("blur transformation".toByteArray())
}
@Synchronized
fun blurBitmap(context: Context, source: Bitmap?, bitmap: Bitmap, @ColorInt colorOverlay: Int): Bitmap? {
if (source == null) return bitmap
Canvas(bitmap).apply {
scale(DEFAULT_DOWN_SAMPLING, DEFAULT_DOWN_SAMPLING)
drawBitmap(source, 0f, 0f, Paint().apply {
flags = Paint.FILTER_BITMAP_FLAG
})
drawColor(colorOverlay)
}
return try {
blur(context, bitmap)
} catch (e: RSRuntimeException) {
e.printStackTrace()
bitmap
}
}
@Throws(RSRuntimeException::class)
private fun blur(context: Context, bitmap: Bitmap): Bitmap {
var rs: RenderScript? = null
var input: Allocation? = null
var output: Allocation? = null
var blur: ScriptIntrinsicBlur? = null
try {
rs = RenderScript.create(context)
rs.messageHandler = RSMessageHandler()
input = Allocation.createFromBitmap(rs, bitmap, Allocation.MipmapControl.MIPMAP_NONE, Allocation.USAGE_SCRIPT)
output = Allocation.createTyped(rs, input.type)
blur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)).apply {
setInput(input)
setRadius(25f)
forEach(output)
}
output.copyTo(bitmap)
} finally {
rs?.destroy()
input?.destroy()
output?.destroy()
blur?.destroy()
}
return bitmap
}
}