日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

android摄像头代码,Android摄像头

發(fā)布時(shí)間:2025/3/21 Android 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android摄像头代码,Android摄像头 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

[android]代碼庫(kù)import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Calendar;

import java.util.Locale;

import android.app.Activity;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.PixelFormat;

import android.hardware.Camera;

import android.os.Bundle;

import android.text.format.DateFormat;

import android.util.Log;

import android.view.KeyEvent;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.Window;

import android.view.WindowManager;

import android.widget.FrameLayout;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends Activity {

private CameraView cv;

// 準(zhǔn)備一個(gè)相機(jī)對(duì)象

private Camera mCamera = null;

// 準(zhǔn)備一個(gè)Bitmap對(duì)象

private Bitmap mBitmap = null;

// 準(zhǔn)備一個(gè)保存圖片的PictureCallback對(duì)象

public Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {

public void onPictureTaken(byte[] data, Camera camera) {

Log.i("yao", "onPictureTaken");

Toast.makeText(getApplicationContext(), "正在保存……", Toast.LENGTH_LONG)

.show();

// 用BitmapFactory.decodeByteArray()方法可以把相機(jī)傳回的裸數(shù)據(jù)轉(zhuǎn)換成Bitmap對(duì)象

mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

// 接下來(lái)的工作就是把Bitmap保存成一個(gè)存儲(chǔ)卡中的文件

File file = new File("/sdcard/YY"

+ new DateFormat().format("yyyyMMdd_hhmmss",

Calendar.getInstance(Locale.CHINA)) + ".jpg");

try {

file.createNewFile();

BufferedOutputStream os = new BufferedOutputStream(

new FileOutputStream(file));

mBitmap.compress(Bitmap.CompressFormat.PNG, 100, os);

os.flush();

os.close();

Toast.makeText(getApplicationContext(), "圖片保存完畢,在存儲(chǔ)卡的根目錄",

Toast.LENGTH_LONG).show();

} catch (IOException e) {

e.printStackTrace();

}

}

};

// Activity的創(chuàng)建方法

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// 窗口去掉標(biāo)題

requestWindowFeature(Window.FEATURE_NO_TITLE);

// 窗口設(shè)置為全屏

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

// 設(shè)置窗口為半透明

getWindow().setFormat(PixelFormat.TRANSLUCENT);

// 提供一個(gè)幀布局

FrameLayout fl = new FrameLayout(this);

// 創(chuàng)建一個(gè)照相預(yù)覽用的SurfaceView子類(lèi),并放在幀布局的底層

cv = new CameraView(this);

fl.addView(cv);

// 創(chuàng)建一個(gè)文本框添加在幀布局中,我們可以看到,文字自動(dòng)出現(xiàn)在了SurfaceView的前面,由此你可以在預(yù)覽窗口做出各種特殊效果

TextView tv = new TextView(this);

tv.setText("請(qǐng)按\"相機(jī)\"按鈕拍攝");

fl.addView(tv);

// 設(shè)置Activity的根內(nèi)容視圖

setContentView(fl);

}

// 相機(jī)按鍵按下的事件處理方法

public boolean onKeyDown(int keyCode, KeyEvent event) {

Log.i("yao", "MainActivity.onKeyDown");

if (keyCode == KeyEvent.KEYCODE_CAMERA) {

if (mCamera != null) {

Log.i("yao", "mCamera.takePicture");

// 當(dāng)按下相機(jī)按鈕時(shí),執(zhí)行相機(jī)對(duì)象的takePicture()方法,該方法有三個(gè)回調(diào)對(duì)象做入?yún)?#xff0c;不需要的時(shí)候可以設(shè)null

mCamera.takePicture(null, null, pictureCallback);

}

}

return cv.onKeyDown(keyCode, event);

}

// 照相視圖

class CameraView extends SurfaceView {

private SurfaceHolder holder = null;

// 構(gòu)造函數(shù)

public CameraView(Context context) {

super(context);

Log.i("yao", "CameraView");

// 操作surface的holder

holder = this.getHolder();

// 創(chuàng)建SurfaceHolder.Callback對(duì)象

holder.addCallback(new SurfaceHolder.Callback() {

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

// 停止預(yù)覽

mCamera.stopPreview();

// 釋放相機(jī)資源并置空

mCamera.release();

mCamera = null;

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

// 當(dāng)預(yù)覽視圖創(chuàng)建的時(shí)候開(kāi)啟相機(jī)

mCamera = Camera.open();

try {

// 設(shè)置預(yù)覽

mCamera.setPreviewDisplay(holder);

} catch (IOException e) {

// 釋放相機(jī)資源并置空

mCamera.release();

mCamera = null;

}

}

// 當(dāng)surface視圖數(shù)據(jù)發(fā)生變化時(shí),處理預(yù)覽信息

@Override

public void surfaceChanged(SurfaceHolder holder, int format,

int width, int height) {

// 獲得相機(jī)參數(shù)對(duì)象

Camera.Parameters parameters = mCamera.getParameters();

// 設(shè)置格式

parameters.setPictureFormat(PixelFormat.JPEG);

// 設(shè)置預(yù)覽大小,這里我的測(cè)試機(jī)是Milsstone所以設(shè)置的是854x480

parameters.setPreviewSize(854, 480);

// 設(shè)置自動(dòng)對(duì)焦

parameters.setFocusMode("auto");

// 設(shè)置圖片保存時(shí)的分辨率大小

parameters.setPictureSize(2592, 1456);

// 給相機(jī)對(duì)象設(shè)置剛才設(shè)定的參數(shù)

mCamera.setParameters(parameters);

// 開(kāi)始預(yù)覽

mCamera.startPreview();

}

});

// 設(shè)置Push緩沖類(lèi)型,說(shuō)明surface數(shù)據(jù)由其他來(lái)源提供,而不是用自己的Canvas來(lái)繪圖,在這里是由攝像頭來(lái)提供數(shù)據(jù)

holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

}

}

}

----------------------------------------------------------------

總結(jié)

以上是生活随笔為你收集整理的android摄像头代码,Android摄像头的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。