JNI调用第三方的so库

接下来这个例子使用美图秀秀的so库,反编译美图秀秀的apk后得到的so库是一个:armeabi下面的libmtimage-jni.so

很明显,我们可以推断出它的模块名称为libmtimage-jni,不的不说使用C/C++本地方法处理图片确实是非常高效!

首先我们需要把so库复制到lib下面,然后我们拿到其中的JNI.java文件,JNI.java其中封装的本地方法全是处理图片的方法,在此处我们介绍其中一个方法:

package com.xpu.mtxx;

import com.mt.mtxx.image.JNI;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends Activity {

    private Bitmap bm;
	private ImageView iv;
	static{
		System.loadLibrary("mtimage-jni");
	}

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        bm = BitmapFactory.decodeFile("sdcard/we.jpg");
        iv = (ImageView) findViewById(R.id.iv);
        iv.setImageBitmap(bm);
    }


    public void click(View v){
    	JNI jni = new JNI();
    	
    	int[] pixels = new int[bm.getWidth() * bm.getHeight()];
    	
    	//获取图片的每个像素的颜色信息
    	bm.getPixels(pixels, 0, bm.getWidth(), 0, 0, bm.getWidth(), bm.getHeight());
    	jni.StyleLomoC(pixels, bm.getWidth(), bm.getHeight());
    	//使用美化后的像素颜色信息重新构造图片
    	Bitmap bmNew = Bitmap.createBitmap(pixels, bm.getWidth(), bm.getHeight(), bm.getConfig());
    	iv.setImageBitmap(bmNew);
    }
    
}

猜你喜欢

转载自blog.csdn.net/m0_38032942/article/details/81130667