package cn.sun.picture;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Display;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private SurfaceView surfaceView;
private Camera camera;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Window window = getWindow();
requestWindowFeature(Window.FEATURE_NO_TITLE);
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.main);
surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
surfaceView.getHolder().setFixedSize(176, 144);
// 设置SurfaceHolder对象的类型
surfaceView.getHolder()
.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// 指定用于捕捉拍照事件的SurfaceHolder.Callback对象
surfaceView.getHolder().addCallback(new SurfaceCallback());
}
private final class SurfaceCallback implements SurfaceHolder.Callback {
private boolean preview;
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// 获得Camera对象
camera = Camera.open();
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Camera.Parameters parameters = camera.getParameters();
// 根据屏幕方向设置预览尺寸
parameters.setPreviewSize(display.getWidth(), display.getHeight());
parameters.setPreviewFrameRate(3);
// 设置照片格式
parameters.setPictureFormat(PixelFormat.JPEG);
parameters.set("jpeg-quality", 85);
// 设置拍摄照片的实际分辨率,本例中的分辨率是1024×768
parameters.setPictureSize(display.getWidth(), display.getHeight());
if (MainActivity.this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
// 如果是竖屏
parameters.set("orientation", "portrait");
// 在2.2以上可以使用
// camera.setDisplayOrientation(90);
} else {
parameters.set("orientation", "landscape");
// 在2.2以上可以使用
// camera.setDisplayOrientation(0);
}
// 设置保存的图像大小
camera.setParameters(parameters);
try {
// 设置用于显示拍照影像的SurfaceHolder对象
camera.setPreviewDisplay(surfaceView.getHolder());
camera.startPreview();
preview = true;
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (camera != null) {
if (preview) {
camera.stopPreview();
}
// 释放手机摄像头
camera.release();
}
}
}
private final class TakePictureCallback implements PictureCallback {
// 该方法用于处理拍摄后的照片数据
@Override
public void onPictureTaken(byte[] data, Camera camera) {
// data参数值就是照片数据,将这些数据以key-value形式保存,以便其他调用该Activity的程序可
// 以获得照片数据
try {
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,
data.length);
File file = new File(Environment.getExternalStorageDirectory()
+ "/ms/prj", System.currentTimeMillis() + ".png");
// 用流的方式保存图片
FileOutputStream outStream = new FileOutputStream(file);
bitmap.compress(CompressFormat.PNG, 100, outStream);
outStream.close();
// 停止照片拍摄
camera.stopPreview();
camera.release();
// 并重新启动预拍
camera.startPreview();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
}
ShutterCallback sc = new ShutterCallback() {
@Override
public void onShutter() {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "capture成功!", Toast.LENGTH_SHORT)
.show();
}
};
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
// 结束拍照
camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
// TODO Auto-generated method stub
// success为true表示对焦成功
if (success) {
camera.takePicture(sc, null, new TakePictureCallback());
}
}
});
return super.onTouchEvent(event);
}
// 创建菜单项
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
super.onCreateOptionsMenu(menu);
// menu.add(0, 0, 0, "选择日期").setIcon(R.drawable.menu_date);
menu.add(0, 0, 0, "拍照").setIcon(android.R.drawable.ic_menu_camera);
return super.onCreateOptionsMenu(menu);
}
// 菜单的点击事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
// 返回今天菜单项的点击事件
case 0: {
camera.autoFocus(new AutoFocusCallback() {
@Override
public void onAutoFocus(boolean success, Camera camera) {
// TODO Auto-generated method stub
// success为true表示对焦成功
if (success) {
camera.takePicture(null, null,
new TakePictureCallback());
}
}
});
break;
}
}
return true;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Android对焦拍照功能实现
共53个文件
class:27个
java:7个
png:6个
4星 · 超过85%的资源 需积分: 31 635 下载量 43 浏览量
2013-02-26
10:45:47
上传
评论 5
收藏 91KB ZIP 举报
温馨提示
点击屏幕,对焦,拍照功能全实现!部分资料来自网络,对焦功能自己想出的实现方法,所以1分下载吧,评价还你1分!
资源推荐
资源详情
资源评论
收起资源包目录
Android对焦拍照功能实现.zip (53个子文件)
TakePicture
.project 847B
project.properties 562B
src
cn
sun
picture
MainActivity.java 6KB
CameraView.java 3KB
CameraActivity.java 5KB
MyView.java 1KB
AndroidManifest.xml 2KB
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
drawable-mdpi
icon.png 3KB
layout
activity_camera.xml 1KB
main.xml 390B
drawable-xhdpi
values
strings.xml 169B
assets
gen
cn
itcast
picture
R.java 739B
sun
picture
BuildConfig.java 156B
R.java 1KB
.classpath 364B
bin
resources.ap_ 11KB
TakePicture.apk 21KB
classes
cn
itcast
picture
R$layout.class 391B
R$drawable.class 397B
R$attr.class 337B
R$id.class 386B
R.class 524B
R$string.class 424B
sun
picture
R$layout.class 421B
BuildConfig.class 337B
R$drawable.class 388B
R$attr.class 328B
CameraActivity$1.class 2KB
CameraActivity$2.class 2KB
CameraView.class 3KB
CameraActivity.class 5KB
MainActivity$TakePictureCallback.class 2KB
MyView$1.class 809B
MainActivity$SurfaceCallback.class 3KB
CameraActivity$3.class 1KB
R$id.class 541B
MainActivity$2.class 1KB
R.class 503B
R$string.class 415B
MainActivity$1.class 845B
MyView.class 1KB
MainActivity$3.class 1KB
CameraActivity$4.class 1KB
MainActivity.class 3KB
AndroidManifest.xml 2KB
dexedLibs
annotations-590a91536f057322e7cd252b7a6753e8.jar 943B
jarlist.cache 119B
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
drawable-mdpi
icon.png 2KB
classes.dex 20KB
共 53 条
- 1
刘兆贤
- 粉丝: 1733
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页