Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Native Method not found:=java.lang.UnsatisfiedLinkError: Native method not found: com.example.finalcamera.NextActivity.convertNativeGray:(JJII)I

public class NextActivity extends Activity implements OnItemSelectedListener{ Bitmap bitmap; ImageView imageView; String TAG="FinalCamera"; int selectedFilter,selectedKMap; SeekBar seekBar; Mat imgMat,tmp;

//native function
public native int convertNativeGray(long matAddrRgba, long matAddrGray,int selectedFilter1,int ksize);





//loading and connecting to opencv library
    /* private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
            @Override
            public void onManagerConnected(int status) {
                switch (status) {
                    case LoaderCallbackInterface.SUCCESS:
                    {
                        System.loadLibrary("mixed_sample");
                        Log.i(TAG, "OpenCV loaded successfully");
                        realProcessing();

                    } break;
                    default:
                    {
                        super.onManagerConnected(status);
                    } break;
                }
            }
        };
*/

    @Override    
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_next);
     imageView=(ImageView)findViewById(R.id.imageView1);
     bitmap  = getIntent().getExtras().getParcelable("name");
    imageView.setImageBitmap(bitmap);
    //for spinner
     Spinner spinner = (Spinner) findViewById(R.id.filter_spinner);
      // Create an ArrayAdapter using the string array and a default spinner layout
      ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
              R.array.Filters, android.R.layout.simple_spinner_item);
      // Specify the layout to use when the list of choices appears
      adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
      // Apply the adapter to the spinner
      spinner.setAdapter(adapter);

      spinner.setOnItemSelectedListener(this);
      //for kmap
      seekBar = (SeekBar) findViewById(R.id.seekBar1);

      seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {


           public void onProgressChanged(SeekBar seekBar, int progresValue, boolean fromUser) {

                        selectedKMap = progresValue;
                        System.out.println("The selected KMap is"+selectedKMap);
                        }
          public void onStartTrackingTouch(SeekBar seekBar) {}
          public void onStopTrackingTouch(SeekBar seekBar) {}
         });




}

public void onResume() { super.onResume(); realProcessing(); }

     public void realProcessing()
{
    System.out.println("This is real processing");
    bitmap  = getIntent().getExtras().getParcelable("name");
     bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);

        tmp = new Mat (bitmap.getWidth(), bitmap.getHeight(), CvType.CV_8UC1);
        imgMat = new Mat (bitmap.getWidth(), bitmap.getHeight(), CvType.CV_8UC1);
       Utils.bitmapToMat(bitmap, tmp);
       System.out.println(tmp.getNativeObjAddr()+""+imgMat.getNativeObjAddr()+""+selectedFilter+""+selectedKMap);
       convertNativeGray(tmp.getNativeObjAddr(), imgMat.getNativeObjAddr(),2,5);


       Utils.matToBitmap(imgMat, bitmap);
     imageView.setImageBitmap(bitmap);
}




@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.next, menu);
    return true;
}
@Override
//when seekbar an item is selected then this method will be called
public void onItemSelected(AdapterView<?> parent, View view, 
        int pos, long id) {
    // TODO Auto-generated method stub
    selectedFilter=pos+1;
      System.out.println("This is selected filter="+selectedFilter);
}
@Override
//when nothing changed this method will be called
public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub

}

} I am initializing the opencv library in main activity whose code is public class MainActivity extends Activity { final int CAMERA_PIC_REQUEST=1; String TAG="FinalCamera";

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        switch (status) {
            case LoaderCallbackInterface.SUCCESS:
            {
                System.loadLibrary("mixed_sample");
                Log.i(TAG, "OpenCV loaded successfully");
               // realProcessing();

            } break;
            default:
            {
                super.onManagerConnected(status);
            } break;
        }
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button take_photo = (Button) findViewById(R.id.button1);
    take_photo.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(i,CAMERA_PIC_REQUEST);
            }
        });
}

public void onResume()
{
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);

}


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    Bitmap thumbnail = null;
    if (requestCode == CAMERA_PIC_REQUEST) {

        if (resultCode == RESULT_OK) {

            thumbnail = (Bitmap) data.getExtras().get("data");

            Intent i = new Intent(this, NextActivity.class);
            i.putExtra("name", thumbnail);
            startActivity(i);



        }

    }

}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}