android camera入门,android 基础一 Camera1 预览、拍照
預(yù)覽流程: Camera.open-->camera.setPreviewDisplay->camera.startPreview
拍照:camera.takePicture-->保存圖片-->camera.startPreview
public class MainActivity extends Activity {
String TAG="Camera_1111";
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
Camera camera;
int cameraId=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e(TAG,"---------onCreate---------");
setContentView(R.layout.activity_main);
surfaceView=(SurfaceView) findViewById(R.id.svCamera);
surfaceHolder=surfaceView.getHolder();
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
camera=Camera.open(cameraId);
try {
camera.setPreviewDisplay(surfaceHolder);
} catch (IOException e) {
e.printStackTrace();
}
setCameraDisplayOrientation();
// configParameters();
camera.startPreview();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.e(TAG,"---------surfaceDestroyed---------");
camera.release();
}
});
}
//配置預(yù)覽參數(shù)
private void configParameters(){
Camera.Parameters param = camera.getParameters();
param.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
param.setPictureFormat(ImageFormat.JPEG);
param.setJpegQuality(100);
param.setPreviewSize(param.getSupportedPreviewSizes().get(0).width,param.getSupportedPreviewSizes().get(0).height);
Log.e(TAG,"param.getSupportedPreviewSizes()"+param.getSupportedPreviewSizes().get(0).width+" X "+param.getSupportedPreviewSizes().get(0).height);
param.setPictureSize(param.getSupportedPictureSizes().get(0).width,param.getSupportedPictureSizes().get(0).height);
camera.setParameters(param);
}
//旋轉(zhuǎn)預(yù)覽角度
private void setCameraDisplayOrientation() {
android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(cameraId, info);
int rotation = getWindowManager().getDefaultDisplay().getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0: degrees = 0; break;
case Surface.ROTATION_90: degrees = 90; break;
case Surface.ROTATION_180: degrees = 180; break;
case Surface.ROTATION_270: degrees = 270; break;
}
int result;
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation + degrees) % 360;
result = (360 - result) % 360; // compensate the mirror
} else { // back-facing
result = (info.orientation - degrees) % 360;
}
Log.e(TAG,"rotation ="+result);
//旋轉(zhuǎn)預(yù)覽的角度
camera.setDisplayOrientation(result);
//-----------------------------
//旋轉(zhuǎn)生成的照片角度
Camera.Parameters param = camera.getParameters();
param.setRotation(result);
camera.setParameters(param);
}
public void photo(View view){
camera.takePicture(null,null,new Camera.PictureCallback(){
@Override
public void onPictureTaken(byte[] data, Camera camera) {
savePicture(data);
camera.startPreview();
}
});
}
private void savePicture(byte[] data) {
String root = Environment.getExternalStorageDirectory().getPath();
File objPic = new File(root,"test.jpg");
BufferedOutputStream bos = null;
try {
bos = new BufferedOutputStream(new FileOutputStream(objPic));
bos.write(data);
bos.flush();
Toast.makeText(this,"拍照成功",Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(bos!=null){
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
public classMainActivity extendsActivity {
String TAG="Camera_1111";
SurfaceView surfaceView;
SurfaceHolder surfaceHolder;
Camera camera;
intcameraId=0;
@Overrideprotected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e(TAG,"---------onCreate---------");
setContentView(R.layout.activity_main);
surfaceView=(SurfaceView) findViewById(R.id.svCamera);
surfaceHolder=surfaceView.getHolder();
surfaceHolder.addCallback(newSurfaceHolder.Callback() {
@Overridepublic voidsurfaceCreated(SurfaceHolder holder) {
camera=Camera.open(cameraId);
try{
camera.setPreviewDisplay(surfaceHolder);
} catch(IOException e) {
e.printStackTrace();
}
setCameraDisplayOrientation();
// configParameters();camera.startPreview();
}
@Overridepublic voidsurfaceChanged(SurfaceHolder holder, intformat, intwidth, intheight) {
}
@Overridepublic voidsurfaceDestroyed(SurfaceHolder holder) {
Log.e(TAG,"---------surfaceDestroyed---------");
camera.release();
}
});
}
//配置預(yù)覽參數(shù)private voidconfigParameters(){
Camera.Parameters param = camera.getParameters();
param.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
param.setPictureFormat(ImageFormat.JPEG);
param.setJpegQuality(100);
param.setPreviewSize(param.getSupportedPreviewSizes().get(0).width,param.getSupportedPreviewSizes().get(0).height);
Log.e(TAG,"param.getSupportedPreviewSizes()"+param.getSupportedPreviewSizes().get(0).width+" X "+param.getSupportedPreviewSizes().get(0).height);
param.setPictureSize(param.getSupportedPictureSizes().get(0).width,param.getSupportedPictureSizes().get(0).height);
camera.setParameters(param);
}
//旋轉(zhuǎn)預(yù)覽角度private voidsetCameraDisplayOrientation() {
android.hardware.Camera.CameraInfo info = newandroid.hardware.Camera.CameraInfo();
android.hardware.Camera.getCameraInfo(cameraId, info);
introtation = getWindowManager().getDefaultDisplay().getRotation();
intdegrees = 0;
switch(rotation) {
caseSurface.ROTATION_0: degrees = 0; break;
caseSurface.ROTATION_90: degrees = 90; break;
caseSurface.ROTATION_180: degrees = 180; break;
caseSurface.ROTATION_270: degrees = 270; break;
}
intresult;
if(info.facing== Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation+ degrees) % 360;
result = (360- result) % 360; // compensate the mirror} else{ // back-facingresult = (info.orientation- degrees) % 360;
}
Log.e(TAG,"rotation ="+result);
//旋轉(zhuǎn)預(yù)覽的角度camera.setDisplayOrientation(result);
//-----------------------------//旋轉(zhuǎn)生成的照片角度Camera.Parameters param = camera.getParameters();
param.setRotation(result);
camera.setParameters(param);
}
public voidphoto(View view){
camera.takePicture(null,null,newCamera.PictureCallback(){
@Overridepublic voidonPictureTaken(byte[] data, Camera camera) {
savePicture(data);
camera.startPreview();
}
});
}
private voidsavePicture(byte[] data) {
String root = Environment.getExternalStorageDirectory().getPath();
File objPic = newFile(root,"test.jpg");
BufferedOutputStream bos = null;
try{
bos = newBufferedOutputStream(newFileOutputStream(objPic));
bos.write(data);
bos.flush();
Toast.makeText(this,"拍照成功",Toast.LENGTH_SHORT).show();
} catch(IOException e) {
e.printStackTrace();
}finally{
if(bos!=null){
try{
bos.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
}
}
原文:https://www.cnblogs.com/jtzp007/p/11650575.html
總結(jié)
以上是生活随笔為你收集整理的android camera入门,android 基础一 Camera1 预览、拍照的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android访问瓦片地图 费流量,瓦片
- 下一篇: 三星s9没有推送android10,2月