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....
本程序可以应用在手机软件开发应用中。调用手机内置的摄像头进行拍照。
《安卓手机拍照程序源码深度解析》 在移动设备领域,安卓系统凭借其开放性和灵活性,成为了开发者们的首选平台之一。对于学生、程序员以及新手来说,掌握安卓应用程序的开发技术,尤其是与用户交互密切的拍照功能,...
【标题】:“相机控制拍照程序”是一个利用Visual Studio 2010开发的MFC应用程序,专门设计用于操控相机进行自动拍照。这个程序不仅能够控制实际的物理相机,还能够接管计算机内置的摄像头,实现实时图像显示和捕获...
这个“C# WM5WM6系列手机照相机调用程序”就是针对这类设备的一个实例,它展示了如何使用C#语言来实现这一功能。 首先,我们要了解Windows Mobile平台上的API调用。在WM5和WM6中,我们可以使用.NET Compact ...
机动车检测的外检拍照程序,可用于平板电脑和手机,专业检测站使用
在WTK2.5的DEFAULTCOLORPHONE和S60 3rd模拟器上测试... 具有指定保存路径, 缩放图片, 保存图片, 解析指定像素颜色, 是一个简单的利用手机拍摄图片的分析软件, 希望对各位有所帮助 :0) 解压后用eclipse导入工程项目即可.
程序运行后,打开照相机摄像头能够自动连续拍照5次。...5次拍照完成后,程序会自动退出,照片保存在手机的SD卡上面。.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
微信小程序是一种轻量级的应用开发平台,主要针对移动端,尤其是智能手机用户。它的核心目标是提供一种无需安装即可使用的应用体验,使得用户能够快速地在微信内部访问和使用各种功能丰富的应用。在这个“微信小程序...
1、使用jweixin-1.4.0.js实现微信公众号Html5页面调用手机照相机识别二维码 2、核心代码已经给到txt文件中,可以根据需要自行扩充。 3、二维码可以由自己的API生成,应用到很多领域。
标题中的“基于JMF的一个手机摄像,拍照程序”指的是使用Java Media Framework (JMF) 开发的一款应用程序,它能够实现在手机上进行摄像和拍照的功能。JMF是Java平台上的一个开源多媒体框架,用于处理、播放、录制和...
本话题主要聚焦在“解决三星手机照相中的BUG”这一主题,通过提供的"CameraBaozi"压缩包文件,我们可以深入探讨三星手机在拍照过程中可能出现的问题以及相应的解决方案。 首先,三星手机在拍照时可能会遇到的常见...
描述部分提到,这个程序实现了模拟安卓应用的部分功能,包括图片浏览和照相摄像。这暗示了程序可能使用了一些库来处理图像显示和捕获,如OpenCV用于图像处理,V4L2(Video for Linux Two)库用于视频捕捉。"其他功能...
标题和描述中提到的"手机拍照或上传相册图片到网站php源代码"是一个涉及到移动端图像上传功能的PHP应用程序。这个程序允许用户通过他们的手机摄像头拍照或者选择相册中的图片,然后将这些图片上传到一个基于PHP的...
标题提到的"J2me版摄像头拍照程序"是一个利用 J2ME 技术实现的移动应用,允许用户通过手机内置的摄像头进行拍照,并提供了其他相关功能。 1. **J2ME架构**: J2ME 包含了配置(Configurations)和 profiles(配置...
微信公众号调用手机摄像头拍照和本地相册,上传服务器,不错的例子
Android 支持人脸识别拍照程序范例,拍摄照片时将自动锁定人脸部位,然后对焦什么的都会跟上,就像现在手机拍照的人脸检测一样的功能。同时本拍照程序还有一些特效功能,比如黑白、负片、曝光过度、色调分离、白板、...
今天弄了差不多一天手机拍照,后来,边弄边想,而且现在也不知道自己知道的这些对不对,首先,如果使用此种方式拍照的话,程序在模拟器中,刚启动就会出问题,不知道什么原因,猜可能是因为是模拟器的原因,目前没有...
本资源包“安卓拍照上传录像监控录屏相关-安卓开发手机相机程序照片旋转处理.rar”主要关注的是照片旋转处理这一重要环节。在安卓设备上,由于不同厂商对相机硬件和API的实现差异,照片的旋转问题时常出现,因此理解...
Delphi摄像头Camera拍照抓图程序,程序窗口的实现使用了三方控件。在摄像头操控方面,可打开摄像头,抓取图像为图片格式并保存,预览所要抓取的照片,可设置相片尺寸,可将抓取的照片修饰成艺术照片、证件照片等。