Advertisement
Vassa007

CameraActivity

Oct 18th, 2024
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.60 KB | None | 0 0
  1. package com.unej.sisterfortendik.activity.wajah;
  2.  
  3. import static com.unej.sisterfortendik.config.util.FileUtils.getPath;
  4.  
  5. import android.annotation.SuppressLint;
  6. import android.app.Activity;
  7. import android.content.ContentResolver;
  8. import android.content.ContentValues;
  9. import android.content.Intent;
  10. import android.database.Cursor;
  11. import android.graphics.Bitmap;
  12. import android.graphics.BitmapFactory;
  13. import android.graphics.ImageDecoder;
  14. import android.net.Uri;
  15. import android.os.Build;
  16. import android.os.Bundle;
  17. import android.os.Environment;
  18. import android.provider.MediaStore;
  19. import android.util.Log;
  20. import android.util.Size;
  21. import android.view.OrientationEventListener;
  22. import android.widget.Button;
  23. import android.widget.ImageView;
  24. import android.widget.TextView;
  25. import android.widget.Toast;
  26.  
  27. import androidx.activity.EdgeToEdge;
  28. import androidx.annotation.NonNull;
  29. import androidx.appcompat.app.AppCompatActivity;
  30. import androidx.camera.core.CameraSelector;
  31. import androidx.camera.core.ImageAnalysis;
  32. import androidx.camera.core.ImageCapture;
  33. import androidx.camera.core.ImageCaptureException;
  34. import androidx.camera.core.ImageProxy;
  35. import androidx.camera.core.Preview;
  36. import androidx.camera.lifecycle.ProcessCameraProvider;
  37. import androidx.camera.view.PreviewView;
  38. import androidx.core.content.ContextCompat;
  39. import androidx.core.graphics.Insets;
  40. import androidx.core.view.ViewCompat;
  41. import androidx.core.view.WindowInsetsCompat;
  42. import androidx.lifecycle.LifecycleOwner;
  43.  
  44. import com.google.common.util.concurrent.ListenableFuture;
  45. import com.unej.sisterfortendik.R;
  46.  
  47. import java.io.ByteArrayOutputStream;
  48. import java.io.File;
  49. import java.io.IOException;
  50. import java.nio.ByteBuffer;
  51. import java.util.concurrent.ExecutionException;
  52. import java.util.concurrent.Executor;
  53.  
  54. public class CameraActivity extends AppCompatActivity {
  55.  
  56.     private PreviewView previewView;
  57.     private ListenableFuture<ProcessCameraProvider> cameraProviderFuture;
  58.     private TextView textView;
  59.     private ImageView im_capture_face;
  60.     private ImageCapture imageCapture;
  61.     private String TAG = "capturee";
  62.     private Button btn_capture_face;
  63.  
  64.     @SuppressLint("RestrictedApi")
  65.     @Override
  66.     protected void onCreate(Bundle savedInstanceState) {
  67.         super.onCreate(savedInstanceState);
  68.         setContentView(R.layout.activity_camera2);
  69.         previewView = findViewById(R.id.previewView);
  70.         im_capture_face = findViewById(R.id.im_capture_face);
  71.         cameraProviderFuture = ProcessCameraProvider.getInstance(this);
  72.         textView = findViewById(R.id.orientation);
  73.         btn_capture_face = findViewById(R.id.btn_capture_face);
  74.  
  75.         imageCapture = new ImageCapture.Builder()
  76.                 .setCaptureMode(ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY)
  77.                 .setTargetResolution(new Size(512, 512))
  78.                 .setMaxResolution(new Size(1024,1024))
  79.                 .build();
  80.  
  81.         cameraProviderFuture = ProcessCameraProvider.getInstance(this);
  82.         cameraProviderFuture.addListener(() -> {
  83.             try {
  84.                 ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
  85. //                startCameraX(cameraProvider);
  86.                 bindImageAnalysis(cameraProvider);
  87.             } catch (ExecutionException e) {
  88.                 e.printStackTrace();
  89.             } catch (InterruptedException e) {
  90.                 e.printStackTrace();
  91.             }
  92.  
  93.         }, getExecutor());
  94.  
  95.         btn_capture_face.setOnClickListener(v -> {
  96.             capturePhoto();
  97.         });
  98.     }
  99.     private void bindImageAnalysis(@NonNull ProcessCameraProvider cameraProvider) {
  100.         ImageAnalysis imageAnalysis =
  101.                 new ImageAnalysis.Builder()
  102.                         .setTargetResolution(new Size(512, 512))
  103.                         .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
  104.                         .build();
  105.         imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(this), new ImageAnalysis.Analyzer() {
  106.             @Override
  107.             public void analyze(@NonNull ImageProxy image) {
  108.                 image.close();
  109.             }
  110.         });
  111.         OrientationEventListener orientationEventListener = new OrientationEventListener(this) {
  112.             @Override
  113.             public void onOrientationChanged(int orientation) {
  114.                 textView.setText(Integer.toString(orientation));
  115.             }
  116.         };
  117.         orientationEventListener.enable();
  118.         Preview preview = new Preview.Builder().build();
  119.         CameraSelector cameraSelector = new CameraSelector.Builder()
  120.                 .requireLensFacing(CameraSelector.LENS_FACING_FRONT).build();
  121.         preview.setSurfaceProvider(previewView.createSurfaceProvider());
  122.         cameraProvider.bindToLifecycle(
  123.                 this, cameraSelector, preview, imageCapture, imageAnalysis);
  124.     }
  125.     private Executor getExecutor() {
  126.         return ContextCompat.getMainExecutor(this);
  127.     }
  128.     private void capturePhoto() {
  129.         long timeStamp = System.currentTimeMillis();
  130.         ContentValues contentValues = new ContentValues();
  131.         contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, timeStamp);
  132.         contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
  133.  
  134.         imageCapture.takePicture(
  135.                 new ImageCapture.OutputFileOptions.Builder(
  136.                         getContentResolver(),
  137.                         MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
  138.                         contentValues
  139.                 ).build(),
  140.                 getExecutor(),
  141.                 new ImageCapture.OnImageSavedCallback() {
  142.                     @Override
  143.                     public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
  144.  
  145.                         Toast.makeText(CameraActivity.this,"Saving...",Toast.LENGTH_SHORT).show();
  146. //                        Log.e(TAG, "file > "+getContentResolver());
  147. //                        Log.e(TAG, "file > "+outputFileResults.getSavedUri());
  148.  
  149.                         Uri uri = outputFileResults.getSavedUri();
  150.                         if (uri == null) {
  151.                             Toast.makeText(CameraActivity.this, "Saved URI should not be null.", Toast.LENGTH_SHORT).show();
  152.                             return;
  153.                         }
  154.  
  155.                         File file = new File(getPath(uri));//uri to path
  156. //                        Log.e(TAG, "path file >: "+file );
  157. //                        Log.e(TAG, "path uri >: "+uri );
  158.                         Intent intent = new Intent();
  159.                         intent.putExtra("keyName", file.toString());
  160.                         intent.putExtra("uri", uri.toString());
  161.                         setResult(RESULT_OK, intent);
  162.                         finish();
  163.  
  164. //                        Bitmap bitmap = null;
  165. //                        ContentResolver contentResolver = getContentResolver();
  166. //                        try {
  167. //                            bitmap = MediaStore.Images.Media.getBitmap(contentResolver, uri);
  168. //                            Log.e(TAG, "path bitmap if : "+bitmap );
  169. //
  170. //                            ByteArrayOutputStream stream = new ByteArrayOutputStream();
  171. //                            bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
  172. //                            byte[] byteArray = stream.toByteArray();
  173. //
  174. //                            Intent intent = new Intent();
  175. //                            intent.putExtra("keyName", file.toString());
  176. //                            intent.putExtra("uri", uri.toString());\
  177. //                            setResult(RESULT_OK, intent);
  178. //                            finish();
  179. //
  180. //                        } catch (IOException e) {
  181. //                            throw new RuntimeException(e);
  182. //                        }
  183.                     }
  184.  
  185.                     @Override
  186.                     public void onError(@NonNull ImageCaptureException exception) {
  187.                         Toast.makeText(CameraActivity.this,"Error: "+exception.getMessage(),Toast.LENGTH_SHORT).show();
  188.                         Log.e(TAG, exception.getMessage());
  189.                     }
  190.                 });
  191.     }
  192.     public String getPath(Uri uri)
  193.     {
  194.         String[] projection = { MediaStore.Images.Media.DATA };
  195.         Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
  196.         if (cursor == null) return null;
  197.         int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
  198.         cursor.moveToFirst();
  199.         String s=cursor.getString(column_index);
  200.         cursor.close();
  201.         return s;
  202.     }
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement