Как работать с растровыми изображениями (эффектами) в Android?

Я хочу добавить некоторые эффекты к изображениям в Android. Я импортирую файл библиотеки в Aviary. Я просто более свежа в разработке Android. Кто-нибудь может быть достаточно любезен, чтобы привести небольшой пример того, как использовать методы из файла библиотеки? Заранее спасибо. С Рождеством, ребята. Я также попробовал пример отсюда. Но я запутался в реализации этого примера.

КОД:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv = (ImageView) findViewById(R.id.butterfly_image);
        iv.setImageBitmap(src);
        Button b = (Button) findViewById(R.id.button);
        b.setOnClickListener(this);
    }

public void onClick(View arg0) {
    iv = (ImageView) findViewById(R.id.butterfly_image);
    System.out.println("Inside onClick()");
    src = doHighlightImage(src);
    System.out.println("doHighlightImage has been passed");
    iv.setImageBitmap(src);
} 

public static Bitmap doHighlightImage(Bitmap src) {
        // create new bitmap, which will be painted and becomes result image
        Bitmap bmOut = Bitmap.createBitmap(src.getWidth() + 96, src.getHeight() + 96, Bitmap.Config.ARGB_8888);
        // setup canvas for painting
        Canvas canvas = new Canvas(bmOut);
        // setup default color
        canvas.drawColor(0, PorterDuff.Mode.CLEAR);

        // create a blur paint for capturing alpha
        Paint ptBlur = new Paint();
        ptBlur.setMaskFilter(new BlurMaskFilter(15, Blur.NORMAL));
        int[] offsetXY = new int[2];
        // capture alpha into a bitmap
        Bitmap bmAlpha = src.extractAlpha(ptBlur, offsetXY);
        // create a color paint
        Paint ptAlphaColor = new Paint();
        ptAlphaColor.setColor(0xFFFFFFFF);
        // paint color for captured alpha region (bitmap)
        canvas.drawBitmap(bmAlpha, offsetXY[0], offsetXY[1], ptAlphaColor);
        // free memory
        bmAlpha.recycle();

        // paint the image source
        canvas.drawBitmap(src, 0, 0, null);

        // return out final image
        return bmOut;
    }

Я не уверен, правильная или неправильная реализация приведенного выше кода. Он не выполняется так, как ожидалось, поэтому я думаю, что это неправильно. Мой logcat показывает NullPointerException при вызове метода.

Logcat:

12-25 16:14:45.150: I/System.out(13695): Inside onClick()
12-25 16:14:45.150: W/dalvikvm(13695): threadid=1: thread exiting with uncaught exception (group=0x4118d438)
12-25 16:14:45.160: E/AndroidRuntime(13695): FATAL EXCEPTION: main
12-25 16:14:45.160: E/AndroidRuntime(13695): java.lang.NullPointerException
12-25 16:14:45.160: E/AndroidRuntime(13695):    at com.example.effects.MainActivity.doHighlightImage(MainActivity.java:47)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at com.example.effects.MainActivity.onClick(MainActivity.java:41)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at android.view.View.performClick(View.java:4101)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at android.view.View$PerformClick.run(View.java:17082)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at android.os.Handler.handleCallback(Handler.java:615)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at android.os.Handler.dispatchMessage(Handler.java:92)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at android.os.Looper.loop(Looper.java:137)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at android.app.ActivityThread.main(ActivityThread.java:4954)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at java.lang.reflect.Method.invokeNative(Native Method)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at java.lang.reflect.Method.invoke(Method.java:511)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
12-25 16:14:45.160: E/AndroidRuntime(13695):    at dalvik.system.NativeStart.main(Native Method)

Из некоторых сообщений в StackOverFlow я также узнал, что некоторые примеры из http://xjaphx.wordpress.com/ не работают должным образом. Любая помощь будет оценена. Счастливого Рождества.

2 ответа

Решение

Я полагаю, ты src Растровая переменная равна нулю. Вы должны назначить изображение, как показано ниже: И вам не нужно инициализировать свой ImageView два раза, как вы уже заявили об этом в onCreate()

Измените свой код onClick, как показано ниже:

Чтобы получить изображение от вашего ImageView вам нужно получить изображение, как показано ниже:

Bitmap src= ((BitmapDrawable)iv.getDrawable()).getBitmap();

public void onClick(View arg0) {

     System.out.println("Inside onClick()");
    src = doHighlightImage(src);
    System.out.println("doHighlightImage has been passed");
    iv.setImageBitmap(src);
} 

Вы можете увидеть мой ответ здесь. Это будет полезно для эффективной обработки вашего растрового изображения.

Как сделать приложение более отзывчивым, использующим несколько растровых изображений?

Другие вопросы по тегам