package org.opencv.samples.tutorial5; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.ListIterator; import org.opencv.android.BaseLoaderCallback; import org.opencv.android.LoaderCallbackInterface; import org.opencv.android.OpenCVLoader; import org.opencv.core.Mat; import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener; import android.annotation.SuppressLint; import android.app.Activity; import android.hardware.Camera.Size; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.SubMenu; import android.view.SurfaceView; import android.view.View; import android.view.View.OnTouchListener; import android.view.WindowManager; import android.widget.Toast; public class Sample5CameraControl extends Activity implements CvCameraViewListener, OnTouchListener { private static final String TAG = "OCVSample::Activity"; private SampleJavaCameraView mOpenCvCameraView; private List<Size> mResolutionList; private MenuItem[] mEffectMenuItems; private SubMenu mColorEffectsMenu; private MenuItem[] mResolutionMenuItems; private SubMenu mResolutionMenu; private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { switch (status) { case LoaderCallbackInterface.SUCCESS: { Log.i(TAG, "OpenCV loaded successfully"); mOpenCvCameraView.enableView(); mOpenCvCameraView.setOnTouchListener(Sample5CameraControl.this); } break; default: { super.onManagerConnected(status); } break; } } }; public Sample5CameraControl() { Log.i(TAG, "Instantiated new " + this.getClass()); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { Log.i(TAG, "called onCreate"); super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(R.layout.tutorial5_surface_view); mOpenCvCameraView = (SampleJavaCameraView) findViewById(R.id.tutorial5_activity_java_surface_view); mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE); mOpenCvCameraView.setCvCameraViewListener(this); } @Override public void onPause() { if (mOpenCvCameraView != null) mOpenCvCameraView.disableView(); super.onPause(); } @Override public void onResume() { super.onResume(); OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback); } public void onDestroy() { super.onDestroy(); if (mOpenCvCameraView != null) mOpenCvCameraView.disableView(); } public void onCameraViewStarted(int width, int height) { } public void onCameraViewStopped() { } public Mat onCameraFrame(Mat inputFrame) { return inputFrame; } @Override public boolean onCreateOptionsMenu(Menu menu) { List<String> effects = mOpenCvCameraView.getEffectList(); if (effects == null) { Log.e(TAG, "Color effects are not supported by device!"); return true; } mColorEffectsMenu = menu.addSubMenu("Color Effect"); mEffectMenuItems = new MenuItem[effects.size()]; int idx = 0; ListIterator<String> effectItr = effects.listIterator(); while(effectItr.hasNext()) { String element = effectItr.next(); mEffectMenuItems[idx] = mColorEffectsMenu.add(1, idx, Menu.NONE, element); idx++; } mResolutionMenu = menu.addSubMenu("Resolution"); mResolutionList = mOpenCvCameraView.getResolutionList(); mResolutionMenuItems = new MenuItem[mResolutionList.size()]; ListIterator<Size> resolutionItr = mResolutionList.listIterator(); idx = 0; while(resolutionItr.hasNext()) { Size element = resolutionItr.next(); mResolutionMenuItems[idx] = mResolutionMenu.add(2, idx, Menu.NONE, Integer.valueOf(element.width).toString() + "x" + Integer.valueOf(element.height).toString()); idx++; } return true; } public boolean onOptionsItemSelected(MenuItem item) { Log.i(TAG, "called onOptionsItemSelected; selected item: " + item); if (item.getGroupId() == 1) { mOpenCvCameraView.setEffect((String) item.getTitle()); Toast.makeText(this, mOpenCvCameraView.getEffect(), Toast.LENGTH_SHORT).show(); } else if (item.getGroupId() == 2) { int id = item.getItemId(); Size resolution = mResolutionList.get(id); mOpenCvCameraView.setResolution(resolution); resolution = mOpenCvCameraView.getResolution(); String caption = Integer.valueOf(resolution.width).toString() + "x" + Integer.valueOf(resolution.height).toString(); Toast.makeText(this, caption, Toast.LENGTH_SHORT).show(); } return true; } @SuppressLint("SimpleDateFormat") @Override public boolean onTouch(View v, MotionEvent event) { Log.i(TAG,"onTouch event"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss"); String currentDateandTime = sdf.format(new Date()); String fileName = Environment.getExternalStorageDirectory().getPath() + "/sample_picture_" + currentDateandTime + ".jpg"; mOpenCvCameraView.takePicture(fileName); Toast.makeText(this, fileName + " saved", Toast.LENGTH_SHORT).show(); return false; } }