package com.icss.test_take_picture;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.graphics.Bitmap.CompressFormat;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.os.Bundle;
import android.os.Environment;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.SurfaceHolder.Callback;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
private SurfaceView sf1;
private Button bt1;
private SurfaceView surfaceview;
private SurfaceHolder surfaceholder;
private Camera camera;
private boolean isPreview=false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sf1=(SurfaceView)findViewById(R.id.sf1);
bt1=(Button)findViewById(R.id.bt1);
//设置手机屏幕为全屏
this.requestWindowFeature(Window.FEATURE_NO_TITLE); //无标题
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
//拍照时,屏幕高亮度
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
surfaceholder=sf1.getHolder(); //从view中取出holder
surfaceholder.setFixedSize(170, 170); //设置分辨率
surfaceholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); //设置不缓冲数据
final PictureCallback jpeg=new PictureCallback() {
@Override//当你照了一张照片的时候
public void onPictureTaken(byte[] data, Camera camera) {
final Bitmap bitmap=BitmapFactory.decodeByteArray(data, 0, data.length);
//根据dialog的布局文件创建一个视图
View dialog=getLayoutInflater().inflate(R.layout.dialog, null);
ImageView imageview=(ImageView)dialog.findViewById(R.id.imageview);
imageview.setImageBitmap(bitmap);
final EditText filename=(EditText)dialog.findViewById(R.id.filename);
new AlertDialog.Builder(MainActivity.this).setView(dialog).setNegativeButton("取消", null).setPositiveButton("确定保存", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//保存图片
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File f=new File(Environment.getExternalStorageDirectory(),filename.getText().toString());
try {
FileOutputStream fos=new FileOutputStream(f);
bitmap.compress(CompressFormat.JPEG, 100,fos);
fos.flush();
fos.close();
Toast.makeText(MainActivity.this, "保存图片成功", Toast.LENGTH_LONG).show();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).show();
}
};
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(camera!=null){
camera.takePicture(null, null, jpeg);
}
}
});
//设置surfacehodler的回调方法,用来根据srufaceview的状态来控制camera
surfaceholder.addCallback(new Callback(){
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
initCamera();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if(camera!=null){
if(isPreview==true){ //还在预览状态
camera.stopPreview(); //取消预览
}
camera.release();
camera=null;
}
}
});
}
//打开camera
protected void initCamera() {
if(!isPreview){
camera=Camera.open();
}
if(camera!=null&&!isPreview){
try {
//将camera当前拍到图像显示到surfaceview中去
Camera.Parameters parameters=camera.getParameters(); //取出camera的参数对象
//设置每秒显示多少帧
parameters.setPreviewFrameRate(3);
//设置图片的大小
parameters.setPictureSize(300, 300);
//设置拍出的图片的格式
parameters.setPictureFormat(PixelFormat.JPEG);
parameters.setPreviewSize(300, 300);
//将上面的parameters参数设置到camera中
camera.setParameters(parameters);
//下一步将camera的图像设置到surfaceview中
camera.setPreviewDisplay(surfaceholder);
///下面开始预览
camera.startPreview();
//自动对焦
camera.autoFocus(null);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
必须得配权限 重点是3个回调 !
分享到:
相关推荐
华为手机拍照程序使用手册1
本程序可以应用在手机软件开发应用中。调用手机内置的摄像头进行拍照。
C#wm5wm6系列手机照相机调用程序C#wm5wm6系列手机照相机调用程序C#wm5wm6系列手机照相机调用程序
用visual studio2010编写的控制相机自动拍照的mfc程序,其中也可以转化为电脑自带的摄像头控制显示出实时图像并捕获实现拍照
delphi摄像头拍照程序 对is04hw摄像头程序的稍微完善
机动车检测的外检拍照程序,可用于平板电脑和手机,专业检测站使用
在WTK2.5的DEFAULTCOLORPHONE和S60 3rd模拟器上测试... 具有指定保存路径, 缩放图片, 保存图片, 解析指定像素颜色, 是一个简单的利用手机拍摄图片的分析软件, 希望对各位有所帮助 :0) 解压后用eclipse导入工程项目即可.
程序运行后,打开照相机摄像头能够自动连续拍照5次。...5次拍照完成后,程序会自动退出,照片保存在手机的SD卡上面。.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Delphi摄像头Camera拍照抓图程序,程序窗口的实现使用了三方控件。在摄像头操控方面,可打开摄像头,抓取图像为图片格式并保存,预览所要抓取的照片,可设置相片尺寸,可将抓取的照片修饰成艺术照片、证件照片等。
安卓开发 手机相机程序,照片旋转处理.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
手机拍照.zip安卓程序源码资源下载手机拍照.zip安卓程序源码资源下载 1.适合学生做毕业设计用 2.适合程序员学习研究用 3.适合新手自学研究使用
微信公众号调用手机摄像头拍照和本地相册,上传服务器,不错的例子
今天弄了差不多一天手机拍照,后来,边弄边想,而且现在也不知道自己知道的这些对不对,首先,如果使用此种方式拍照的话,程序在模拟器中,刚启动就会出问题,不知道什么原因,猜可能是因为是模拟器的原因,目前没有...
虽然调用摄像头拍照既方便又快捷,但并不是每一次我们都需要去当场拍一张照片的。 因为每个人的手机相册里应该都会存有许许多多张照片,直接从相册里选取一张现有的照 片会比打开相机拍一张照片更加常用。一个优秀的...
Android 支持人脸识别拍照程序范例,拍摄照片时将自动锁定人脸部位,然后对焦什么的都会跟上,就像现在手机拍照的人脸检测一样的功能。同时本拍照程序还有一些特效功能,比如黑白、负片、曝光过度、色调分离、白板、...
票据信息提取程序,支持手机拍照识别,支持连接扫描仪 可以使用上下方向键方便查看拍摄的图片
android下的相机拍照程序,不同的手机对程序中的picturesize要进行适当的设置:parameters.setPictureSize(2592, 1944);
《Android 4.X手机/平板电脑程序设计入门、应用到精通(第2版)》9大特色: 丰富的Eclipse开发环境操作技巧,帮助初学者快速学会Eclipse的强大功能以及程序调试技术,同时讲解了很多程序编辑辅助功能,可大大提升...
在linux上编写编译完成 的模拟安卓程序的代码,C语言编写,完成图片浏览和照相 摄像功能 其他功能留有接口 可自行加入 具体说明在readme中
该程序是一个基于JMF的写一个通过控制电脑摄像头拍照,保存,摄像保存,以及上传到流媒体服务器上的案例。希望对你有帮助。