0

Lorsque vous essayez de rendre une image floue que je veux utiliserrenderScript Aucune classe Def trouvé, en essayant de brouiller l'image d'arrière-plan

import android.support.v8.renderscript.* 

Alors je mets dans mon fichier build.gradle:

android { 
compileSdkVersion 23 
buildToolsVersion '23.0.1'" 

defaultConfig { 
    minSdkVersion 14 
    targetSdkVersion 23 

    renderscriptTargetApi 18 
    renderscriptSupportModeEnabled true 

}} 

et j'utilise cette méthode pour brouiller l'image:

public static Bitmap blur(Context ctx, 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); 

    RenderScript rs = RenderScript.create(ctx); 
    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; 
} 

Mais le code se bloque sur cette ligne:

RenderScript rs = RenderScript.create(ctx); 

Donner cette erreur:

03-03 14:40:02.965 27865-27865/com.myorder.app E/AndroidRuntime: FATAL EXCEPTION: main 
                  java.lang.NoClassDefFoundError: android.support.v8.renderscript.RenderScript 
                   at com.myorder.profile.BlurBuilder.blur(BlurBuilder.java:27) 
                   at com.myorder.ui.SuggestionsHome$1.onResponse(SuggestionsHome.java:70) 
                   at com.myorder.ui.SuggestionsHome$1.onResponse(SuggestionsHome.java:59) 
                   at com.myorder.core.api.dao.impl.AuthDAOImpl$1.onResponse(AuthDAOImpl.java:75) 
                   at com.myorder.core.api.dao.impl.AuthDAOImpl$1.onResponse(AuthDAOImpl.java:62) 
                   at mobvolley.JacksonRequest.deliverResponse(JacksonRequest.java:84) 
                   at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) 
                   at android.os.Handler.handleCallback(Handler.java:730) 
                   at android.os.Handler.dispatchMessage(Handler.java:92) 
                   at android.os.Looper.loop(Looper.java:176) 
                   at android.app.ActivityThread.main(ActivityThread.java:5419) 
                   at java.lang.reflect.Method.invokeNative(Native Method) 
                   at java.lang.reflect.Method.invoke(Method.java:525) 
                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
                   at dalvik.system.NativeStart.main(Native Method) 

Je ne t sais pourquoi comme je l'ai suivi tout d'ici: http://developer.android.com/guide/topics/renderscript/compute.html

Quelqu'un peut-il aider?

+0

Le code semble correct. L'avez-vous exécuté sur un vrai appareil? – Settembrini

Répondre

0

Cela peut être dû à l'effacement de Proguard. Il y a quelques guides pour garder toutes les classes liées à RS/etc. inclus dans votre .apk.

0

J'ai un projet avec un module d'application et un module de bibliothèque.

Afin de pouvoir importer les classes de support.v8, je déclare l'utilisation de renderScript dans le fichier module Bibliothèque de build.gradle en utilisant:

renderscriptTargetApi 23 
    renderscriptSupportModeEnabled true 

Ce qui est bon pour la compilation, mais provoque toujours la NoClassDefFoundError.

J'ai ensuite déclaré à nouveau l'utilisation de Renderscript dans le fichier build.gradle du module d'application et maintenant cela fonctionne! (testé avec l'émulateur et un appareil Nexus 5x exécutant l'API 23).