Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android renderscript使用通用图像加载程序进行图像模糊_Android_Universal Image Loader_Renderscript - Fatal编程技术网

Android renderscript使用通用图像加载程序进行图像模糊

Android renderscript使用通用图像加载程序进行图像模糊,android,universal-image-loader,renderscript,Android,Universal Image Loader,Renderscript,我想将下载的图像设置到imageview中。但我需要它作为模糊图像。我使用了通用图像加载器。所以我的问题是如何使用通用图像加载程序和renderscript设置模糊图像?多谢各位 ImageLoader.getInstance().displayImage(QuickRepostApplication.getInstance().getImage(), main_image, options, new ImageLoadingListener() { @Override

我想将下载的图像设置到imageview中。但我需要它作为模糊图像。我使用了通用图像加载器。所以我的问题是如何使用通用图像加载程序和renderscript设置模糊图像?多谢各位

ImageLoader.getInstance().displayImage(QuickRepostApplication.getInstance().getImage(), main_image, options, new ImageLoadingListener() {

            @Override
            public void onLoadingStarted(String s, View view) {

            }

            @Override
            public void onLoadingFailed(String s, View view, FailReason failReason) {

            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                float r = 25.0f;
                Bitmap bitmap = Bitmap.createBitmap(
                        loadedImage.getWidth(), loadedImage.getHeight(),
                        Bitmap.Config.ARGB_8888);

                RenderScript renderScript = RenderScript.create(MainActivity.this);

                Allocation blurInput = Allocation.createFromBitmap(renderScript, loadedImage);
                Allocation blurOutput = Allocation.createFromBitmap(renderScript, bitmap);

                ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(renderScript,
                        Element.U8_4(renderScript));
                blur.setInput(blurInput);
                blur.setRadius(r);
                blur.forEach(blurOutput);

                blurOutput.copyTo(bitmap);
                renderScript.destroy();
            }

            @Override
            public void onLoadingCancelled(String s, View view) {

            }

        }, new ImageLoadingProgressListener() {
            @Override
            public void onProgressUpdate(String imageUri, View view, int current, int total) {
            }
        });
你可以试试这个方法
imageLoader.displayImage(images.get(position)、子级、选项、新ImageLoadingListener(){})

使用UIL的回调方法返回位图,然后您可以根据需要模糊位图。下面是一个示例项目,它可以帮助您模糊下载的图像

我发现这篇文章很有帮助。我在这里也提供了主代码以供快速参考

public class BlurBuilder {

//Increase scailing to increase the blurring. Maximum value = 1f
private static final float BITMAP_SCALE = 0.4f;

//0 <= BLUR_RADIUS <= 25f
private static final float BLUR_RADIUS = 7.5f;
RenderScript rs;

public static Bitmap blur(Context context, Bitmap image) {
    int width = Math.round(image.getWidth() * BITMAP_SCALE);
    int height = Math.round(image.getHeight() * BITMAP_SCALE);

    Bitmap inputBitmap = Bitmap.createScaledBitmap(image, width, height, false);
    Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);

    if(rs == null)
        rs = RenderScript.create(context);

    ScriptIntrinsicBlur theIntrinsic = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));
    Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap);
    Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap);
    theIntrinsic.setRadius(BLUR_RADIUS);
    theIntrinsic.setInput(tmpIn);
    theIntrinsic.forEach(tmpOut);
    tmpOut.copyTo(outputBitmap);

    return outputBitmap;
    }
}

希望这能有所帮助。

比RenderScript快:不,抱歉。。这不是我想要的正常工作…ImageLoadingListener此回调有一个方法onLoadingComplete(字符串s、视图视图、位图)您可以在这里进行模糊,然后在imageview上进行设置。onLoadingComplete(字符串s、视图、位图)(imageview)视图。setImageBitmap(位图),这个位图你可以做模糊。但我的问题是如何设置位图。。。。这里给出了一个非常简单的例子。。。我试着这样做,但没有改变…使用imageView.setImageBitmap(位图);将位图设置为imageview。如果不是这样,请清楚地描述您的问题以及您迄今为止所做的工作。如果您可以粘贴一些代码,这将非常有帮助。如果可以避免将RenderScript对象陷入“模糊”例程,那么您确实希望只创建一次RenderScript对象(即,第一次调用此函数创建对象,而后续调用可以重用它)。虽然较新的Android版本加快了上下文创建速度,但它将在旧设备上造成大量GC搅动。
imageLoader.displayImage(userImage, backImage, op, new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String s, View view) {

            }

            @Override
            public void onLoadingFailed(String s, View view, FailReason failReason) {

            }

            @Override
            public void onLoadingComplete(String s, View view, Bitmap bitmap) {
              Bitmap blurredBitmap = BlurBuilder.blur(MyActivity.this, bitmap);
              view.setBackgroundDrawable(new BitmapDrawable( getResources(), blurredBitmap ) );
            }

            @Override
            public void onLoadingCancelled(String s, View view) {

            }
    });