100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 使用SurfaceView+Camera模仿照相机拍照功能

使用SurfaceView+Camera模仿照相机拍照功能

时间:2021-11-24 19:20:26

相关推荐

使用SurfaceView+Camera模仿照相机拍照功能

效果图

自己写一个软件,简单模仿照相机的功能

主要控件:

用SurfaseView来控制视图

使用Camera来操控照相机

页面很简单

用的是RelativeLayout相对布局

<RelativeLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><SurfaceViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/sv_camera_surface"/><Buttonandroid:layout_width="50dp"android:layout_height="50dp"android:background="@drawable/camera"android:onClick="takePhoto"android:layout_alignParentRight="true"android:layout_centerVertical="true"/></RelativeLayout>

后台代码

public class CameraActivity extends AppCompatActivity {private SurfaceView sv_camera_surface;private Camera camera;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_camera);//获取SurfaceView控件sv_camera_surface = (SurfaceView) findViewById(R.id.sv_camera_surface);//建立回调函数sv_camera_surface.getHolder().addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder surfaceHolder) {//打开照相机camera = Camera.open();//设置摄像参数Camera.Parameters parameters= camera.getParameters();//设置格式parameters.setPictureFormat(PixelFormat.JPEG);//设置质量parameters.set("jpeg-quality",100);//将参数赋给cameracamera.setParameters(parameters);//开启预览效果camera.startPreview();try {//进行展示camera.setPreviewDisplay(sv_camera_surface.getHolder());} catch (IOException e) {e.printStackTrace();}}@Overridepublic void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {}@Overridepublic void surfaceDestroyed(SurfaceHolder surfaceHolder) {//当拍完则停止画面并释放camera.stopPreview();camera.release();}});}//拍照的方法public void takePhoto(View view){//拍照,第三个参为回调函数camera.takePicture(null, null, new Camera.PictureCallback() {@Overridepublic void onPictureTaken(byte[] bytes, Camera camera) {//bytes就是传过来的图片,将bytes格式的图片转码为bitmapBitmap bitmap=BitmapFactory.decodeByteArray(bytes,0,bytes.length);try {//设置时间Calendar calendar=Calendar.getInstance();int year=calendar.get(Calendar.YEAR);int month=calendar.get(Calendar.MONTH);int day=calendar.get(Calendar.DAY_OF_MONTH);int second=calendar.get(Calendar.SECOND);//输出到手机的相册里面,FileOutputStream fos=new FileOutputStream("/mnt/sdcard/dcim/camera/"+year+(month+1)+day+second+".jpg");//设置格式press(pressFormat.JPEG,85,fos);camera.stopPreview();camera.startPreview();} catch (FileNotFoundException e) {e.printStackTrace();}}});}}

配置信息

获得三样权限

<!--写存储--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!--获得相机--><uses-permission android:name="android.permission.CAMERA"></uses-permission><!--删除或增加文件--><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

用到的素材

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。