android相机camera拍照
来源:互联网 发布:淘宝外贸尾单曝光 编辑:程序博客网 时间:2024/04/26 04:00
package com.donzell.lesson;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.hardware.Camera;import android.os.Bundle;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.widget.LinearLayout;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.util.Collections;import java.util.Comparator;import java.util.List;/** * Created by Donzell on 2017/6/5. * copyringht @ iwhere chengdu technology */public class PhotoActivity extends Activity implements View.OnClickListener{ private SurfaceView mSurfaceView; private SurfaceHolder mSurfaceHolder; private int mCameraId = Camera.CameraInfo.CAMERA_FACING_BACK; Camera mCamera; private boolean isPreviewIng = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_photo); findViewById(R.id.btnPhoto).setOnClickListener(this); findViewById(R.id.btnChange).setOnClickListener(this); mSurfaceView = (SurfaceView) findViewById(R.id.mSurfaceView); initPhotoView(); } @Override public void onClick(View v) { if(v.getId() == R.id.btnPhoto){ return; } if(v.getId() == R.id.btnChange){ switchCamera(); return; } } private void initPhotoView(){ mSurfaceHolder = mSurfaceView.getHolder(); mSurfaceHolder.addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { initCamera(); startPriview(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { E("VIEW的尺寸===>width="+width + " | height="+height); if(isfirst){ isfirst =false; resetViewSize(); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { } }); } boolean isfirst = true; Camera.Size bestsize; private void initCamera(){ releaseCamera(); mCamera = Camera.open(mCameraId); mCamera.setDisplayOrientation(90); try{ mCamera.setPreviewDisplay(mSurfaceHolder); }catch (Exception e){e.printStackTrace();} Camera.Parameters parameters = mCamera.getParameters(); bestsize = getBestSize(); E("最佳的尺寸===>width="+bestsize.width + " | height="+bestsize.height); parameters.setPreviewSize(bestsize.width,bestsize.height); parameters.setPictureSize(bestsize.width,bestsize.height); mCamera.setParameters(parameters); } private void photo(){ mCamera.takePicture(null, null, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { Bitmap bitmmap = BitmapFactory.decodeByteArray(data,0,data.length); File file = new File("/storage/sdcard0/360/01.jpg"); try{ file.createNewFile(); BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(file)); bitmmap.compress(Bitmap.CompressFormat.JPEG,100,fos); fos.flush(); fos.close(); }catch (Exception e){e.printStackTrace();} } }); } /** * 根据预览照片比例调整surfaceview大小 */ private void resetViewSize(){ E("VIEW的尺寸2===>width="+mSurfaceView.getWidth() + " | height="+mSurfaceView.getHeight()); float b1 = bestsize.height / (float)bestsize.width; float v1 = mSurfaceView.getWidth() / (float)mSurfaceView.getHeight(); E("VIEW的尺寸2===>b1="+b1 + " | v1="+v1); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)mSurfaceView.getLayoutParams(); if(b1 > v1){ int newViewHeight = (int)(mSurfaceView.getWidth() * b1); params. height = newViewHeight; params.width = mSurfaceView.getWidth(); int margintX = -(params.width - mSurfaceView.getHeight()) / 2; params.leftMargin = margintX; params.rightMargin = margintX; E("VIEW的尺寸8===>width="+ params.width + " | height="+ params.height +" |margintX="+margintX ); mSurfaceView.setLayoutParams(params); }else if(b1 < v1){ int newViewHeight = (int)(mSurfaceView.getHeight() / b1); params.width = newViewHeight; params.height = mSurfaceView.getWidth(); int margintY = -(params.height - mSurfaceView.getWidth()) / 2; params.topMargin = margintY; params.bottomMargin = margintY; E("VIEW的尺寸8===>width="+ params.width + " | height="+ params.height +" |margintY="+margintY); mSurfaceView.setLayoutParams(params); } E("VIEW的尺寸3===>width="+ params.width + " | height="+ params.height ); } /** * 获取小于等于640X480尺寸的第一个尺寸大小 * @return */ private Camera.Size getBestSize(){ int DEFAULT_WIDTH = 640; int DEFAULT_HEIGHT = 480; Camera.Parameters parameters = mCamera.getParameters(); List<Camera.Size> sizes = parameters.getSupportedPictureSizes(); Collections.sort(sizes, new Comparator<Camera.Size>() { @Override public int compare(Camera.Size lhs, Camera.Size rhs) { return lhs.width - rhs.width ; } }); for (Camera.Size size : sizes){ E("支持的尺寸===>width="+size.width + " | height="+size.height); } for (Camera.Size size : sizes){ if(size.width >= DEFAULT_WIDTH && size.height >= DEFAULT_HEIGHT){ return size; } } return sizes.get(0); } private void switchCamera(){ if(mCameraId == Camera.CameraInfo.CAMERA_FACING_BACK){ mCameraId = Camera.CameraInfo.CAMERA_FACING_FRONT; }else{ mCameraId = Camera.CameraInfo.CAMERA_FACING_BACK; } initCamera(); startPriview(); } private void startPriview(){ stopPriview(); mCamera.startPreview(); isPreviewIng = true; } private void stopPriview(){ if(isPreviewIng){ mCamera.stopPreview(); isPreviewIng = false; } } private void releaseCamera(){ if(mCamera != null){ stopPriview(); mCamera.release(); mCamera = null; } } @Override protected void onDestroy() { super.onDestroy(); releaseCamera(); } public static void E(String msg){ Log.e("CAMERA",""+msg); }}
阅读全文
0 0
- android相机camera拍照
- Android camera相机开发拍照功能
- 相机拍照Camera
- 【Android】Android相机拍照
- android相机拍照
- android相机拍照源码
- Android中相机拍照
- Android相机拍照,储存
- android打开相机拍照
- android自定义相机拍照
- android camera 后台拍照
- Android Camera进行拍照
- Android之Camera拍照
- android Camera拍照
- Android Camera进行拍照
- Android+Camera+拍照
- Android Camera拍照实现
- Android Camera 无法拍照
- linux网络设备—PHY
- 如何省时省力的使用XMind思维导图软件?
- web.xml 配置中classpath: 与classpath*:的区别
- 基本类型与装箱基本类型的使用规律(效率相差数10倍)
- iOS 开发 righBarButtonItems
- android相机camera拍照
- ORA-00904: invalid identifier解决方法
- 常用系统管理服务及转换
- python图像
- AJAX文件上传
- Siege命令简介
- hashmap示例:统计一个英文字符串中字母个数(例如:ddbba,2个d,2个b,一个a)
- Java VisualVM插件地址
- 商城项目实战34:单点登录系统SSO最小实现的接口文档及Cookie工具类