Guest User

Untitled

a guest
Feb 24th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.92 KB | None | 0 0
  1. public class ImageActivity extends AppCompatActivity implements SurfaceHolder.Callback {
  2.  
  3. private static final String TAG = ImageActivity.class.getSimpleName();
  4.  
  5. private ImageButton closeIV;
  6. private ImageView flipCameraIV;
  7. private FloatingActionButton fab_capture;
  8. private LinearLayout galleryLayout;
  9.  
  10. private Camera camera;
  11. private Camera.PictureCallback jpegCallback;
  12. private SurfaceView surfaceView;
  13. private SurfaceHolder holder;
  14.  
  15. private int currCamId = 0;
  16.  
  17. private boolean isGalleryImg = false;
  18. private boolean isCameraImg = false;
  19.  
  20. private byte[] camBytes = null;
  21.  
  22. private static final int GAL_REQ_CODE = 240;
  23. private static final int CAM_PERM_CODE = 242;
  24.  
  25. @Override
  26. protected void onCreate(Bundle savedInstanceState) {
  27. super.onCreate(savedInstanceState);
  28. getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
  29. setContentView(R.layout.activity_image);
  30.  
  31. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  32. getWindow().setStatusBarColor(getResources().getColor(R.color.black));
  33. }
  34.  
  35. init();
  36.  
  37. holder = surfaceView.getHolder();
  38. holder.addCallback(this);
  39. holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  40.  
  41. currCamId = Camera.CameraInfo.CAMERA_FACING_BACK;
  42.  
  43. }
  44.  
  45. private void handleClicks() {
  46.  
  47. closeIV.setOnClickListener(new View.OnClickListener() {
  48. @Override
  49. public void onClick(View view) {
  50. finish();
  51. }
  52. });
  53.  
  54. flipCameraIV.setOnClickListener(new View.OnClickListener() {
  55. @Override
  56. public void onClick(View view) {
  57. Log.d(TAG, "Flip Clicked");
  58. switchCamera();
  59. }
  60. });
  61.  
  62. galleryLayout.setOnClickListener(new View.OnClickListener() {
  63. @Override
  64. public void onClick(View view) {
  65. isGalleryImg = true;
  66. Log.d(TAG, "Gallery Button Clicked");
  67. Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
  68. galleryIntent.setType("image/*");
  69. startActivityForResult(galleryIntent, GAL_REQ_CODE);
  70. }
  71. });
  72.  
  73. fab_capture.setOnClickListener(new View.OnClickListener() {
  74. @Override
  75. public void onClick(View view) {
  76. captureImage();
  77. }
  78. });
  79.  
  80. jpegCallback = new Camera.PictureCallback() {
  81. @Override
  82. public void onPictureTaken(byte[] bytes, Camera camera) {
  83. assert bytes != null;
  84. Log.d(TAG, "Camera Bytes Array Length:t" + bytes.length);
  85.  
  86. isCameraImg = true;
  87.  
  88. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  89.  
  90.  
  91. Intent intent = new Intent(ImageActivity.this, PreviewActivity.class);
  92. intent.putExtra("camera_bytes", bytes);
  93. intent.putExtra("fromCamera", isCameraImg);
  94. startActivity(intent);
  95. return;
  96.  
  97. //refreshCamera();
  98. }
  99. };
  100.  
  101. }
  102.  
  103.  
  104. private void captureImage() {
  105. camera.takePicture(null, null, jpegCallback);
  106. }
  107.  
  108. public void refreshCamera() {
  109. if (holder.getSurface() == null) {
  110. return; // preview surface is empty
  111. }
  112.  
  113. // stop preview, then make changes
  114. try {
  115. camera.stopPreview();
  116. } catch (Exception ex) {
  117. ex.printStackTrace();
  118. }
  119.  
  120. try {
  121. camera.setPreviewDisplay(holder);
  122. camera.startPreview();
  123. } catch (IOException e) {
  124. e.printStackTrace();
  125. }
  126.  
  127. }
  128.  
  129. private void init() {
  130. closeIV = findViewById(R.id.closeIV);
  131. fab_capture = findViewById(R.id.fab_capture);
  132. galleryLayout = findViewById(R.id.galleryLayout);
  133. flipCameraIV = findViewById(R.id.flipCameraIV);
  134. surfaceView = findViewById(R.id.surfaceView);
  135.  
  136. handleClicks();
  137.  
  138. }
  139.  
  140. @Override
  141. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  142. super.onActivityResult(requestCode, resultCode, data);
  143.  
  144. if (requestCode == GAL_REQ_CODE && resultCode == RESULT_OK) {
  145. Uri imgUri = data.getData();
  146. Intent intent = new Intent(ImageActivity.this, PreviewActivity.class);
  147. intent.putExtra("fromGallery", isGalleryImg);
  148. intent.putExtra("gallery_image", imgUri.toString());
  149. startActivity(intent);
  150. }
  151.  
  152. }
  153.  
  154. @TargetApi(Build.VERSION_CODES.M)
  155. @Override
  156. public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  157.  
  158. for (int mResults : grantResults) {
  159. if (mResults == PackageManager.PERMISSION_DENIED) {
  160. requestPermissions(new String[]{Manifest.permission.CAMERA,
  161. Manifest.permission.WRITE_EXTERNAL_STORAGE},
  162. CAM_PERM_CODE);
  163. } else {
  164. Toast.makeText(ImageActivity.this, "Permission Already Granted", Toast.LENGTH_SHORT).show();
  165. }
  166. }
  167.  
  168. }
  169.  
  170. @Override
  171. public void surfaceCreated(SurfaceHolder surfaceHolder) {
  172. openCamera();
  173. }
  174.  
  175. private void openCamera() {
  176. try {
  177. camera = Camera.open(currCamId);
  178. } catch (RuntimeException rex) {
  179. rex.printStackTrace();
  180. }
  181.  
  182. Camera.Parameters parameters = camera.getParameters();
  183. parameters.setPreviewFrameRate(20);
  184. parameters.setPreviewSize(352, 288);
  185. camera.setDisplayOrientation(90);
  186. camera.setParameters(parameters);
  187.  
  188. try {
  189. camera.setPreviewDisplay(holder);
  190. } catch (IOException e) {
  191. e.printStackTrace();
  192. }
  193. camera.startPreview();
  194. }
  195.  
  196. @Override
  197. public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
  198. refreshCamera();
  199. }
  200.  
  201. @Override
  202. public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
  203. camera.stopPreview();
  204. camera.release();
  205. camera = null;
  206.  
  207. }
  208.  
  209. @Override
  210. protected void onPause() {
  211. super.onPause();
  212. camera.stopPreview();
  213. }
  214.  
  215. @Override
  216. protected void onDestroy() {
  217. super.onDestroy();
  218. if (camera != null){
  219. camera.stopPreview();
  220. camera.release();
  221. camera = null;
  222. }
  223. }
  224.  
  225. private void switchCamera() {
  226.  
  227. // code I tried to switch camera with but not working
  228.  
  229. if (currCamId == Camera.CameraInfo.CAMERA_FACING_BACK){
  230. currCamId = Camera.CameraInfo.CAMERA_FACING_FRONT;
  231. } else {
  232. currCamId = Camera.CameraInfo.CAMERA_FACING_BACK;
  233. }
  234.  
  235. camera = Camera.open(currCamId);
  236. Camera.CameraInfo info = new Camera.CameraInfo();
  237. Camera.getCameraInfo(Camera.CameraInfo.CAMERA_FACING_FRONT, info);
  238.  
  239. int rotation = this.getWindowManager().getDefaultDisplay().getRotation();
  240. int degrees = 0;
  241.  
  242. switch (rotation){
  243. case Surface.ROTATION_0: degrees = 0; break;
  244. case Surface.ROTATION_90: degrees = 90; break;
  245. case Surface.ROTATION_180: degrees = 180; break;
  246. case Surface.ROTATION_270: degrees = 270; break;
  247. }
  248.  
  249. int rotate = (info.orientation - degrees + 360) % 360;
  250. Camera.Parameters parameters = camera.getParameters();
  251. parameters.setRotation(rotate);
  252.  
  253. try {
  254. camera.setPreviewDisplay(surfaceView.getHolder());
  255. } catch (IOException e) {
  256. e.printStackTrace();
  257. }
  258.  
  259. camera.setParameters(parameters);
  260. camera.setDisplayOrientation(90);
  261. camera.startPreview();
  262.  
  263. //openCamera();
  264.  
  265. }
Add Comment
Please, Sign In to add comment