当前位置: 移动技术网 > IT编程>移动开发>Android > Android开发之Camera解析

Android开发之Camera解析

2018年12月27日  | 移动技术网IT编程  | 我要评论

从容不迫的反义词,王琴微博,我的美女巫师老婆

android开发之camera解析

这里写图片描述

这里写图片描述

androidmanifest.xml



 
 

 
  

 

 

  
 

activity_main.xml




 <framelayout android:id="@+id/cameralayout" android:layout_gravity="center_horizontal" android:layout_height="300dp" android:layout_width="300dp">

 

</framelayout>

mainactivty.java

package com.hala.camera;

import android.content.context;
import android.content.intent;
import android.hardware.camera;
import android.net.uri;
import android.os.environment;
import android.provider.mediastore;
import android.support.v7.app.appcompatactivity;
import android.os.bundle;
import android.view.surfaceholder;
import android.view.surfaceview;
import android.view.view;
import android.widget.framelayout;
import android.widget.imageview;

import java.io.file;
import java.io.filenotfoundexception;
import java.io.fileoutputstream;
import java.io.ioexception;

public class mainactivity extends appcompatactivity {
 public static final string file_path = environment.getexternalstoragedirectory().getpath() + "/imooc/temp.jpg";
 public static final int request_code = 0;
 private imageview mimageview;
 private framelayout mcameralayout;
 private camera mcamera;
 private cameraview mcameraview;

 @override
 protected void oncreate(bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
  setcontentview(r.layout.activity_main);

  mimageview = (imageview) findviewbyid(r.id.imageview);
  mcameralayout = (framelayout) findviewbyid(r.id.cameralayout);
 }

 public void systemcamera(view view) {

  if (mcameraview != null) {
mcameraview.release();
  }
  // open system camera.

  intent intent = new intent();
  intent.setaction(mediastore.action_image_capture);
  intent.addcategory(intent.category_default);

  file file = new file(file_path);
  if (file.exists()) {
file.delete();
  }

  // 文件转换成uri
  uri uri = uri.fromfile(file);
  intent.putextra(mediastore.extra_output, uri);

  startactivityforresult(intent, request_code);
 }

 @override
 protected void onactivityresult(int requestcode, int resultcode, intent data) {
  super.onactivityresult(requestcode, resultcode, data);
  if (requestcode == request_code) {
file file = new file(file_path);
if (file.exists()) {
 mimageview.setimageuri(uri.fromfile(file));
}
  }
 }

 public void cameraapi(view view) {
  // 创建一个camera视图。
  // 将camera视图添加到cameralayout里。
  // 做一些camera的设置
  if (mcamera == null && mcameraview == null) {
mcamera = getcamera();
mcameraview = new cameraview(this, mcamera);
mcameralayout.addview(mcameraview);

camera.parameters parameters = mcamera.getparameters();
parameters.setrotation(90);
mcamera.setparameters(parameters);
  }
 }

 public void takephoto(view view) {
  // 点击按钮拍照,并保存到存储里。
  if (mcamera != null) {
try {
 mcamera.takepicture(null, null, new camera.picturecallback() {
  @override
  public void onpicturetaken(byte[] data, camera camera) {
file file = new file(file_path);
try {
 fileoutputstream fileoutputstream = new fileoutputstream(file);
 fileoutputstream.write(data);
 fileoutputstream.close();
} catch (filenotfoundexception e) {
 e.printstacktrace();
} catch (ioexception e) {
 e.printstacktrace();
}
  }
 });
} catch (exception e) {
 e.printstacktrace();
}
  }
 }

 public camera getcamera() {
  camera camera = null;
  try {
camera = camera.open();
  } catch (exception e) {
e.printstacktrace();
// 错误提示
  }
  return camera;
 }

 public class cameraview extends surfaceview implements surfaceholder.callback {

  camera mcamera;
  private final surfaceholder msurfaceholder;

  public cameraview(context context, camera camera) {
super(context);
mcamera = camera;
msurfaceholder = getholder();
msurfaceholder.addcallback(this);
  }

  @override
  public void surfacecreated(surfaceholder holder) {
try {
 if (mcamera != null) {
  mcamera.setpreviewdisplay(holder);
  mcamera.setdisplayorientation(90);
  mcamera.startpreview();
 }
} catch (ioexception e) {
 e.printstacktrace();
}
  }

  @override
  public void surfacechanged(surfaceholder holder, int format, int width, int height) {
if (msurfaceholder.getsurface() == null) {
 return;
}

if (mcamera != null) {
 mcamera.stoppreview();
}

try {
 if (mcamera != null) {
  mcamera.setpreviewdisplay(holder);
  mcamera.startpreview();
 }
} catch (ioexception e) {
 e.printstacktrace();
}

  }

  @override
  public void surfacedestroyed(surfaceholder holder) {
release();
  }

  public void release() {
if (mcamera != null) {
 mcamera.setpreviewcallback(null);
 mcamera.stoppreview();
 mcamera.release();
 mcamera = null;
}
  }
 }

 @override
 protected void onpause() {
  super.onpause();
  if (mcameraview != null) {
mcameraview.release();
  }
 }

 @override
 protected void onresume() {
  super.onresume();
  mcamera = getcamera();
  mcameralayout.removeallviews();
  mcameraview = new cameraview(this, mcamera);
  mcameralayout.addview(mcameraview);

  camera.parameters params = mcamera.getparameters();
  params.setrotation(90);
  mcamera.setparameters(params);
 }
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网