一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Android - Android實(shí)現(xiàn)拍照功能

Android實(shí)現(xiàn)拍照功能

2022-02-27 16:22tangcheng_ok Android

這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)拍照功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下

大家好,這是一個簡單的拍照功能,很簡單的界面,一個顯示圖像區(qū)域SurfaceView一個“拍照”按鈕。直接上代碼!

1、CameraDemoActivity.java(主界面)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package org.winplus.camera;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
 
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class CameraDemoActivity extends Activity{
 
 private final static String TAG = "CameraActivity";
 private SurfaceView surfaceView;
 private SurfaceHolder surfaceHolder;
 private Camera camera;
 private File picture;
 private Button btnSave;
  
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  this.requestWindowFeature(Window.FEATURE_NO_TITLE);
  setContentView(R.layout.main);
  setupViews();
 }
  
 private void setupViews(){
  surfaceView = (SurfaceView) findViewById(R.id.camera_preview); // Camera interface to instantiate components
  surfaceHolder = surfaceView.getHolder(); // Camera interface to instantiate components
  surfaceHolder.addCallback(surfaceCallback); // Add a callback for the SurfaceHolder
  surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
   
  btnSave = (Button) findViewById(R.id.save_pic);
   
  btnSave.setOnClickListener(new OnClickListener() {
    
   @Override
   public void onClick(View v) {
    takePic();
   }
  });
 }
  
  
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_CAMERA
    || keyCode == KeyEvent.KEYCODE_SEARCH) {
   takePic();
   return true;
  }
  return super.onKeyDown(keyCode, event);
 }
 
 private void takePic() {
 
  camera.stopPreview();// stop the preview
 
  camera.takePicture(null, null, pictureCallback); // picture
 }
 
 // Photo call back
 Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {
  //@Override
  public void onPictureTaken(byte[] data, Camera camera) {
   new SavePictureTask().execute(data);
   camera.startPreview();
  }
 };
 
 // save pic
 class SavePictureTask extends AsyncTask<byte[], String, String> {
  @Override
  protected String doInBackground(byte[]... params) {
   String fname = DateFormat.format("yyyyMMddhhmmss", new Date()).toString()+".jpg";
    
   Log.i(TAG, "fname="+fname+";dir="+Environment.getExternalStorageDirectory());
   //picture = new File(Environment.getExternalStorageDirectory(),fname);// create file
    
   picture = new File(Environment.getExternalStorageDirectory()+"/"+fname);
    
   try {
    FileOutputStream fos = new FileOutputStream(picture.getPath()); // Get file output stream
    fos.write(params[0]); // Written to the file
    fos.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
   return null;
  }
 }
 
 // SurfaceHodler Callback handle to open the camera, off camera and photo size changes
 SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
 
  public void surfaceCreated(SurfaceHolder holder) {
   Log.i(TAG, "surfaceCallback====");
   camera = Camera.open(); // Turn on the camera
   try {
    camera.setPreviewDisplay(holder); // Set Preview
   } catch (IOException e) {
    camera.release();// release camera
    camera = null;
   }
  }
 
  public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {
   Log.i(TAG,"====surfaceChanged");
   Camera.Parameters parameters = camera.getParameters(); // Camera parameters to obtain
   parameters.setPictureFormat(PixelFormat.JPEG);// Setting Picture Format
//   parameters.set("rotation", 180); // Arbitrary rotation
   camera.setDisplayOrientation(0);
//   parameters.setPreviewSize(400, 300); // Set Photo Size
   camera.setParameters(parameters); // Setting camera parameters
   camera.startPreview(); // Start Preview
  }
 
  public void surfaceDestroyed(SurfaceHolder holder) {
   Log.i(TAG,"====surfaceDestroyed");
   camera.stopPreview();// stop preview
   camera.release(); // Release camera resources
   camera = null;
  }
 };
}

2、main.xml(布局文件)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical" >
 
 <android.view.SurfaceView
  android:id="@+id/camera_preview"
  android:layout_width="800dip"
  android:layout_height="600dip"
  android:layout_alignParentTop="true"
  android:layout_centerInParent="true"
  android:layout_gravity="center_vertical|center_horizontal" />
 
 <Button
  android:id="@+id/save_pic"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:text="@string/txt_save" />
 
</LinearLayout>

3、別忘了添加權(quán)限:

?
1
2
3
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

源碼下載:Android實(shí)現(xiàn)拍照功能

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/tangcheng_ok/article/details/7036871

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 好男人资源免费播放在线观看 | 国产自拍视频一区 | 日韩av.com | 久久久久琪琪精品色 | 激情五月开心 | 欧美人曾交 | 日本亚洲欧洲高清有码在线播放 | 丝瓜黄瓜茄子西红柿秋葵榴莲 | 精品无码国产AV一区二区三区 | 日韩一区二区三区四区不卡 | 桃花岛在线 | 波多野结衣之高校教师 | 亚洲精品一区二区三区中文字幕 | 范冰冰a级一级特级毛片 | 激情综 | 亚洲国产精品自在自线观看 | 色哟哟观看 | 乳色吐息讲的是什么 | 窝窝影院午夜色在线视频 | 超兴奋朋友的中文字幕下 | 欧美一区二区三区四区视频 | 男女肉粗暴进来下面好紧 | 国产麻豆精品免费视频 | 日本人啪啪 | 国产一区日韩二区欧美三 | 久99视频精品免费观看福利 | 成人女人天堂午夜视频 | 国产精品亚洲专区在线播放 | 欧美在线视频一区在线观看 | 黄瓜视频免费 | 波多野结中文字幕在线69视频 | 国产乱子伦一区二区三区 | 高清毛片一区二区三区 | www.亚洲色图 | 国产精品香蕉夜间视频免费播放 | 亚欧有色在线观看免费版高清 | 99久久精品国产综合一区 | 嫩草蜜桃 | 国产欧美日韩在线不卡第一页 | 日本免费一区二区三区a区 日本免费三片在线观看 | 草莓视频深夜释放 |