拍照

在main.xml中:

<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:background="#000000">

<Button

android:id="@+id/but"

android:layout_width="50dp"

android:layout_height="fill_parent"

android:background="#3399ff"

android:textColor="#ffffff"

android:text="照相"/>

<SurfaceView

android:id="@+id/surface"

android:layout_width="fill_parent"

android:layout_height="fill_parent"/>

</LinearLayout>

在MyCameraDemo.java中:

package com.li.camera;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import android.annotation.SuppressLint;

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.hardware.Camera.AutoFocusCallback;

import android.hardware.Camera.Parameters;

import android.hardware.Camera.PictureCallback;

import android.hardware.Camera.ShutterCallback;

import android.os.Bundle;

import android.os.Environment;

import android.view.Display;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.WindowManager;

import android.widget.Button;

import android.widget.Toast;

public class MyCameraDemo extends Activity {

private SurfaceView surface = null ;

private Button but = null ;

private SurfaceHolder holder = null ;

private Camera cam = null ;

private boolean previewRunning = true ;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

super.setContentView(R.layout.main);

this.but = (Button) super.findViewById(R.id.but) ;

this.surface = (SurfaceView) super.findViewById(R.id.surface) ;

this.holder = this.surface.getHolder() ;

this.holder.addCallback(new MySurfaceViewCallback()) ;

this.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS) ;

this.holder.setFixedSize(500, 350);

this.but.setOnClickListener(new OnClickListenerImpl()) ;

}

private class OnClickListenerImpl implements OnClickListener {

public void onClick(View v) {

if(MyCameraDemo.this.cam != null) {

MyCameraDemo.this.cam.autoFocus(new AutoFocusCallbackImpl()) ;

}

}

}

private class MySurfaceViewCallback implements SurfaceHolder.Callback {

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

}

@SuppressLint("NewApi")

public void surfaceCreated(SurfaceHolder holder) {

MyCameraDemo.this.cam = Camera.open(0) ; // 取得第一个摄像头

WindowManager manager = (WindowManager) MyCameraDemo.this

.getSystemService(Context.WINDOW_SERVICE);

Display display = manager.getDefaultDisplay() ;

Parameters param = MyCameraDemo.this.cam.getParameters() ;

param.setPreviewSize(display.getWidth(), display.getHeight()) ;

param.setPreviewFrameRate(5) ; // 一秒5帧

param.setPictureFormat(PixelFormat.JPEG) ; // 图片形式

param.set("jpen-quality", 80) ;

MyCameraDemo.this.cam.setParameters(param) ;

try {

MyCameraDemo.this.cam.setPreviewDisplay(MyCameraDemo.this.holder) ;

} catch (IOException e) {

}

MyCameraDemo.this.cam.startPreview() ; // 进行预览

MyCameraDemo.this.previewRunning = true ; // 已经开始预览

}

public void surfaceDestroyed(SurfaceHolder holder) {

if(MyCameraDemo.this.cam != null) {

if(MyCameraDemo.this.previewRunning) {

MyCameraDemo.this.cam.stopPreview() ; // 停止预览

MyCameraDemo.this.previewRunning = false ;

}

MyCameraDemo.this.cam.release() ;

}

}

}

private class AutoFocusCallbackImpl implements AutoFocusCallback {

public void onAutoFocus(boolean success, Camera camera) {

if(success) { // 成功

MyCameraDemo.this.cam.takePicture(sc, pc, jpgcall) ;

}

}

}

private PictureCallback jpgcall = new PictureCallback() {

public void onPictureTaken(byte[] data, Camera camera) { // 保存图片的操作

Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);

String fileName = Environment.getExternalStorageDirectory()

.toString()

+ File.separator

+ "liyewenphoto"

+ File.separator

+ "LYW" + System.currentTimeMillis() + ".jpg";

File file = new File(fileName) ;

if (!file.getParentFile().exists()) {

file.getParentFile().mkdirs() ; // 创建文件夹

}

try {

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)) ;

bmp.compress(Bitmap.CompressFormat.JPEG, 80, bos) ; // 向缓冲区之中压缩图片

bos.flush() ;

bos.close() ;

Toast.makeText(MyCameraDemo.this,

"拍照成功,照片已保存在" + fileName + "文件之中!", Toast.LENGTH_SHORT)

.show();

} catch (Exception e) {

Toast.makeText(MyCameraDemo.this,

"拍照失败!", Toast.LENGTH_SHORT)

.show();

}

MyCameraDemo.this.cam.stopPreview() ;

MyCameraDemo.this.cam.startPreview() ;

}

} ;

private ShutterCallback sc = new ShutterCallback(){

public void onShutter() {

// 按下快门之后进行的操作

}

} ;

private PictureCallback pc = new PictureCallback() {

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

}

} ;

}

修改AndroidManifest.xml中:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.li.camera"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="8"

android:targetSdkVersion="15" />

<application

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name=".MyCameraDemo"

android:label="@string/title_activity_my_camera_demo"

android:screenOrientation="landscape">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

<uses-feature android:name="android.hardware.camera" />

<uses-feature android:name="android.hardware.camera.autofocus" />

<uses-permission android:name="android.permission.CAMERA" />

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

</manifest>

更多相关文章

  1. android4.4十分钟后休眠修改为10分钟不操作关机
  2. Android 保存图片到系统相册
  3. android 绘画网格图片
  4. android典型代码系列(二)------sqlite数据库操作高级
  5. 代码中修改TextView的DrawableLeft图片
  6. java和Android文件下载断点续传和图片下载代码实现,可直接复制简
  7. android 存储图片到data目录和读取data目录下的图片
  8. android中简单的图片翻页效果
  9. android从相册中获取图片并将其显示在当前界面

随机推荐

  1. Android(安卓)APK反编译方法(可以获取APK
  2. Android(安卓)日志获取总结
  3. [Android]度量单位dip介绍
  4. android 4.4 Settings分析
  5. android SQLite使用SQLiteOpenHelper类对
  6. 深夜扒一扒Android的发展史
  7. Android中Service和Activity相互通信示例
  8. Android音频和震动的基本实现
  9. Android入门进阶教程(16)-ActivityThead
  10. Android多分辨率适配-长度单位和转换计算