1
package org.opencv.samples.tutorial3;
3
import java.text.SimpleDateFormat;
6
import java.util.ListIterator;
8
import org.opencv.android.BaseLoaderCallback;
9
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
10
import org.opencv.android.LoaderCallbackInterface;
11
import org.opencv.android.OpenCVLoader;
12
import org.opencv.core.Mat;
13
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;
15
import android.annotation.SuppressLint;
16
import android.app.Activity;
17
import android.hardware.Camera.Size;
18
import android.os.Bundle;
19
import android.os.Environment;
20
import android.util.Log;
21
import android.view.Menu;
22
import android.view.MenuItem;
23
import android.view.MotionEvent;
24
import android.view.SubMenu;
25
import android.view.SurfaceView;
26
import android.view.View;
27
import android.view.View.OnTouchListener;
28
import android.view.WindowManager;
29
import android.widget.Toast;
31
public class Tutorial3Activity extends Activity implements CvCameraViewListener2, OnTouchListener {
32
private static final String TAG = "OCVSample::Activity";
34
private Tutorial3View mOpenCvCameraView;
35
private List<Size> mResolutionList;
36
private MenuItem[] mEffectMenuItems;
37
private SubMenu mColorEffectsMenu;
38
private MenuItem[] mResolutionMenuItems;
39
private SubMenu mResolutionMenu;
41
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
43
public void onManagerConnected(int status) {
45
case LoaderCallbackInterface.SUCCESS:
47
Log.i(TAG, "OpenCV loaded successfully");
48
mOpenCvCameraView.enableView();
49
mOpenCvCameraView.setOnTouchListener(Tutorial3Activity.this);
53
super.onManagerConnected(status);
59
public Tutorial3Activity() {
60
Log.i(TAG, "Instantiated new " + this.getClass());
63
/** Called when the activity is first created. */
65
public void onCreate(Bundle savedInstanceState) {
66
Log.i(TAG, "called onCreate");
67
super.onCreate(savedInstanceState);
68
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
70
setContentView(R.layout.tutorial3_surface_view);
72
mOpenCvCameraView = (Tutorial3View) findViewById(R.id.tutorial3_activity_java_surface_view);
74
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
76
mOpenCvCameraView.setCvCameraViewListener(this);
83
if (mOpenCvCameraView != null)
84
mOpenCvCameraView.disableView();
88
public void onResume()
91
if (!OpenCVLoader.initDebug()) {
92
Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
93
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
95
Log.d(TAG, "OpenCV library found inside package. Using it!");
96
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
100
public void onDestroy() {
102
if (mOpenCvCameraView != null)
103
mOpenCvCameraView.disableView();
106
public void onCameraViewStarted(int width, int height) {
109
public void onCameraViewStopped() {
112
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
113
return inputFrame.rgba();
117
public boolean onCreateOptionsMenu(Menu menu) {
118
List<String> effects = mOpenCvCameraView.getEffectList();
120
if (effects == null) {
121
Log.e(TAG, "Color effects are not supported by device!");
125
mColorEffectsMenu = menu.addSubMenu("Color Effect");
126
mEffectMenuItems = new MenuItem[effects.size()];
129
ListIterator<String> effectItr = effects.listIterator();
130
while(effectItr.hasNext()) {
131
String element = effectItr.next();
132
mEffectMenuItems[idx] = mColorEffectsMenu.add(1, idx, Menu.NONE, element);
136
mResolutionMenu = menu.addSubMenu("Resolution");
137
mResolutionList = mOpenCvCameraView.getResolutionList();
138
mResolutionMenuItems = new MenuItem[mResolutionList.size()];
140
ListIterator<Size> resolutionItr = mResolutionList.listIterator();
142
while(resolutionItr.hasNext()) {
143
Size element = resolutionItr.next();
144
mResolutionMenuItems[idx] = mResolutionMenu.add(2, idx, Menu.NONE,
145
Integer.valueOf(element.width).toString() + "x" + Integer.valueOf(element.height).toString());
152
public boolean onOptionsItemSelected(MenuItem item) {
153
Log.i(TAG, "called onOptionsItemSelected; selected item: " + item);
154
if (item.getGroupId() == 1)
156
mOpenCvCameraView.setEffect((String) item.getTitle());
157
Toast.makeText(this, mOpenCvCameraView.getEffect(), Toast.LENGTH_SHORT).show();
159
else if (item.getGroupId() == 2)
161
int id = item.getItemId();
162
Size resolution = mResolutionList.get(id);
163
mOpenCvCameraView.setResolution(resolution);
164
resolution = mOpenCvCameraView.getResolution();
165
String caption = Integer.valueOf(resolution.width).toString() + "x" + Integer.valueOf(resolution.height).toString();
166
Toast.makeText(this, caption, Toast.LENGTH_SHORT).show();
172
@SuppressLint("SimpleDateFormat")
174
public boolean onTouch(View v, MotionEvent event) {
175
Log.i(TAG,"onTouch event");
176
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
177
String currentDateandTime = sdf.format(new Date());
178
String fileName = Environment.getExternalStorageDirectory().getPath() +
179
"/sample_picture_" + currentDateandTime + ".jpg";
180
mOpenCvCameraView.takePicture(fileName);
181
Toast.makeText(this, fileName + " saved", Toast.LENGTH_SHORT).show();