diff --git a/samples/android/tutorial-3-cameracontrol/src/org/opencv/samples/tutorial3/Tutorial3View.java b/samples/android/tutorial-3-cameracontrol/src/org/opencv/samples/tutorial3/Tutorial3View.java index 04c163ff8..ef15cb5ee 100644 --- a/samples/android/tutorial-3-cameracontrol/src/org/opencv/samples/tutorial3/Tutorial3View.java +++ b/samples/android/tutorial-3-cameracontrol/src/org/opencv/samples/tutorial3/Tutorial3View.java @@ -6,17 +6,16 @@ import java.util.List; import org.opencv.android.JavaCameraView; import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.hardware.Camera; import android.hardware.Camera.PictureCallback; import android.hardware.Camera.Size; import android.util.AttributeSet; import android.util.Log; -public class Tutorial3View extends JavaCameraView { +public class Tutorial3View extends JavaCameraView implements PictureCallback { private static final String TAG = "Sample::Tutorial3View"; + private String mPictureFileName; public Tutorial3View(Context context, AttributeSet attrs) { super(context, attrs); @@ -56,26 +55,31 @@ public class Tutorial3View extends JavaCameraView { } public void takePicture(final String fileName) { - Log.i(TAG, "Tacking picture"); - PictureCallback callback = new PictureCallback() { + Log.i(TAG, "Taking picture"); + this.mPictureFileName = fileName; + // Call to garbage collector to avoid bug http://code.opencv.org/issues/2961 + System.gc(); - private String mPictureFileName = fileName; - - @Override - public void onPictureTaken(byte[] data, Camera camera) { - Log.i(TAG, "Saving a bitmap to file"); - Bitmap picture = BitmapFactory.decodeByteArray(data, 0, data.length); - try { - FileOutputStream out = new FileOutputStream(mPictureFileName); - picture.compress(Bitmap.CompressFormat.JPEG, 90, out); - picture.recycle(); - mCamera.startPreview(); - } catch (Exception e) { - e.printStackTrace(); - } - } - }; - - mCamera.takePicture(null, null, callback); + // PictureCallback is implemented by the current class + mCamera.takePicture(null, null, this); } -} + + @Override + public void onPictureTaken(byte[] data, Camera camera) { + Log.i(TAG, "Saving a bitmap to file"); + // The camera preview was automatically stopped. Start it again. + mCamera.startPreview(); + + // Write the image in a file (in jpeg format) + try { + FileOutputStream fos = new FileOutputStream(mPictureFileName); + + fos.write(data); + fos.close(); + + } catch (java.io.IOException e) { + Log.e("PictureDemo", "Exception in photoCallback", e); + } + + } +} \ No newline at end of file