自主创建Camera照相机
看完这个列子就懂了:
MainActivity.java文件
package com.example.userdefinedcameratest;
import android.app.Activity;
import android.content.Intent;
import android.hardware.Camera;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class MainActivity extends Activity {
SurfaceView showPicture;
SurfaceHolder holder;
Button takepicture;
Camera camera;
File picture_file = null;
// 获取回调机制
private SurfaceHolder.Callback callback = new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
startpreview();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
stoppreview();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showPicture = (SurfaceView) findViewById(R.id.showPicture);
holder = showPicture.getHolder();
holder.addCallback(callback);
takepicture = (Button) findViewById(R.id.takepicture);
takepicture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 使用Camera获取图片数据,(相当于按下快门)
camera.takePicture(null,null,new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
if (savePicture(data)!=null) {
// 获取路径
String picture_path = savePicture(data);
// 启动显示图片activity
Intent intent = new Intent(MainActivity.this, GetPicture.class);
intent.putExtra("path", picture_path);
startActivity(intent);
}
else
Toast.makeText(MainActivity.this, "保存失败",Toast.LENGTH_SHORT).show();
}
});
}
});
}
private String savePicture(byte[]data)
{
// 创建文件夹
File file = new File(Environment.getExternalStorageDirectory(), "picture");
// 判断该文件夹是否存在
if (!file.exists())
{
// 不存在-创建
file.mkdirs();
}
// 创建文件
picture_file = new File(file, System.currentTimeMillis()+".jpg");
// 判断文件是否存在
if (!picture_file.exists())
{
// 不存在-创建
try {
picture_file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
// 创建输出流
try {
FileOutputStream output = new FileOutputStream(picture_file);
// 写入数据
output.write(data);
output.flush();
output.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 返回文件的绝对路径
return picture_file.getAbsolutePath();
}
private void startpreview()
{
camera = Camera.open();
try {
// 将画面投影到surfaceView
camera.setPreviewDisplay(holder);
// 旋转90度
camera.setDisplayOrientation(90);
camera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
}
private void stoppreview()
{
// 暂停投影
camera.stopPreview();
// 释放
camera.release();
}
}
GetPicture.java文件:package com.example.userdefinedcameratest;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.widget.ImageView;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
/**
* Created by 辉 on 2016/7/24.
*/
public class GetPicture extends Activity {
ImageView get_picture;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.get_picture);
get_picture = (ImageView) findViewById(R.id.get_picture);
Intent intent =getIntent();
// 获取传来的路径
String path = intent.getStringExtra("path");
// 方法:3
Bitmap bitmap = BitmapFactory.decodeFile(path);
get_picture.setImageBitmap(bitmap);
// 方法:2
// get_picture.setImageURI(Uri.fromFile(new File(path)));
// 方法:1
// 创建输入流获取图片
// try {
// FileInputStream fileInputStream = new FileInputStream(path);
//// 通过路径获取bitMap图片
// Bitmap picture = BitmapFactory.decodeStream(fileInputStream);
//
// get_picture.setImageBitmap(picture);
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// }
}
}