Skip to content

Commit

Permalink
Take snapshot from preview window (that's the way AI will use it)
Browse files Browse the repository at this point in the history
  • Loading branch information
Grzegorz Kapusta authored and Grzegorz Kapusta committed Aug 17, 2017
1 parent 746d80b commit e76902f
Showing 1 changed file with 35 additions and 24 deletions.
59 changes: 35 additions & 24 deletions app/src/main/java/pl/pola_app/helpers/OldCamera.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,20 @@
import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.ImageFormat;
import android.graphics.Rect;
import android.graphics.YuvImage;
import android.hardware.Camera;
import android.util.Log;
import android.view.SurfaceHolder;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;

import timber.log.Timber;

@TargetApi(21)
public class OldCamera extends CameraCompat {

private static final int DEFAULT_MIN_PIC_SIZE = 1000;
Camera camera;
boolean safeToTakePicture = false;
boolean isPreviewing = false;
Expand All @@ -27,9 +30,10 @@ public class OldCamera extends CameraCompat {
}

@Override
public void open(){
public void open() {
camera = Camera.open();
camera.cancelAutoFocus();
camera.setDisplayOrientation(90);
final Camera.Parameters parameters = camera.getParameters();
final List<Camera.Size> supportedPictureSizes = parameters.getSupportedPictureSizes();
Camera.Size size = supportedPictureSizes.get(0);
Expand All @@ -42,9 +46,12 @@ public void open(){
}

parameters.setPictureSize(size.width, size.height);
parameters.setPreviewSize(size.width, size.height);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);
parameters.setPreviewFormat(ImageFormat.NV21);
parameters.setRecordingHint(true);
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
camera.setParameters(parameters);
camera.setDisplayOrientation(90);
}


Expand All @@ -53,7 +60,6 @@ public void openPreview(SurfaceHolder surface) {
try {
camera.setPreviewDisplay(surface);
camera.startPreview();
camera.autoFocus(null);
isPreviewing = true;
safeToTakePicture = true;
} catch (IOException e) {
Expand All @@ -63,33 +69,38 @@ public void openPreview(SurfaceHolder surface) {

@Override
public void closePreview() {
camera.stopPreview();
camera.release();
isPreviewing = false;
safeToTakePicture = false;
camera.stopPreview();
camera.release();
}

@Override
public void takePicture(OnPhotoTakenSuccessListener onPhotoTakenSuccessListener) {
if (!safeToTakePicture) {
Log.e("TAG", "Skipped photo");
Timber.e("Skipped photo");
return;
}
camera.takePicture(null, null, (data, camera) -> {
safeToTakePicture = true;
final Camera.Parameters parameters = camera.getParameters();
final Camera.Size pictureSize = parameters.getPictureSize();
final Bitmap bitmap = FileUtils.rotateImageAndScale(BitmapFactory.decodeByteArray(data, 0, data.length), 90, maxPictureSize);
onPhotoTakenSuccessListener.onPhotoTakenSuccess(
bitmap,
pictureSize.width,
pictureSize.height,
bitmap.getWidth(),
bitmap.getHeight()

);
camera.startPreview();
camera.setOneShotPreviewCallback((data, camera1) -> {
if (data != null && data.length != 0) {
final Camera.Parameters parameters = camera1.getParameters();
final Camera.Size pictureSize = parameters.getPictureSize();

ByteArrayOutputStream out = new ByteArrayOutputStream();
YuvImage yuvImage = new YuvImage(data, ImageFormat.NV21, pictureSize.width, pictureSize.height, null);
yuvImage.compressToJpeg(new Rect(0, 0, pictureSize.width, pictureSize.height), 100, out);
byte[] imageBytes = out.toByteArray();
Bitmap image = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
image = FileUtils.rotateImageAndScale(image, 90, maxPictureSize);
onPhotoTakenSuccessListener.onPhotoTakenSuccess(
image,
pictureSize.width,
pictureSize.height,
image.getWidth(),
image.getHeight()

);
}
});
safeToTakePicture = false;
}
}

0 comments on commit e76902f

Please sign in to comment.