版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】android如何实现简单拍照功能
这篇文章主要介绍android如何实现简单拍照功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!拍照可以调用系统的相机进行拍照,拍完保存到相应的SD卡目录。最近要用到拍照这个功能,首先试了下调用相机拍照,保存到相应目录,然后用imageview显示的时候感觉,很模糊。可能是图片被压缩的太狠了。所以自己使用Camera写了一个拍照的功能,拍出来的还挺清晰的,不过文件有点大一张图片差不多1.7M。如果想拍高清图可以使用下面的代码。代码很简单,我就不做过多解释了。package
com.example.testsimple;
import
java.io.File;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.util.Date;
import
android.os.AsyncTask;
import
android.os.Bundle;
import
android.os.Environment;
import
android.app.Activity;
import
android.content.Intent;
import
android.graphics.Bitmap;
import
android.graphics.BitmapFactory;
import
android.graphics.PixelFormat;
import
android.hardware.Camera;
import
android.text.format.DateFormat;
import
android.util.Log;
import
android.view.KeyEvent;
import
android.view.Menu;
import
android.view.SurfaceHolder;
import
android.view.SurfaceView;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.ImageView;
public
class
MainActivity
extends
Activity
{
private
SurfaceView
surfaceView;
private
SurfaceHolder
surfaceHolder;
private
Camera
camera;
private
File
picture;
private
Button
btnSave;
private
final
static
String
TAG
=
"CameraActivity";
private
ImageView
open_picIcon;
@Override
public
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
Intent
intent=new
Intent(MainActivity.this,MyCameraActivity.class);
startActivity(intent);
finish();*/
setupViews();
}
private
void
setupViews(){
surfaceView
=
(SurfaceView)
findViewById(R.id.camera_preview);
//
Camera
interface
to
instantiate
components
surfaceHolder
=
surfaceView.getHolder();
//
Camera
interface
to
instantiate
components
surfaceHolder.addCallback(surfaceCallback);
//
Add
a
callback
for
the
SurfaceHolder
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
btnSave
=
(Button)
findViewById(R.id.save_pic);
open_picIcon=(ImageView)
findViewById(R.id.open_picIcon);
btnSave.setOnClickListener(new
OnClickListener()
{
@Override
public
void
onClick(View
v)
{
surfaceView.setVisibility(View.VISIBLE);
open_picIcon.setVisibility(View.GONE);
takePic();
}
});
}
@Override
public
boolean
onKeyDown(int
keyCode,
KeyEvent
event)
{
if
(keyCode
==
KeyEvent.KEYCODE_CAMERA
||
keyCode
==
KeyEvent.KEYCODE_SEARCH)
{
takePic();
return
true;
}
return
super.onKeyDown(keyCode,
event);
}
private
void
takePic()
{
camera.stopPreview();//
stop
the
preview
camera.takePicture(null,
null,
pictureCallback);
//
picture
}
//
Photo
call
back
Camera.PictureCallback
pictureCallback
=
new
Camera.PictureCallback()
{
//@Override
public
void
onPictureTaken(byte[]
data,
Camera
camera)
{
new
SavePictureTask().execute(data);
camera.startPreview();
}
};
//
save
pic
class
SavePictureTask
extends
AsyncTask<byte[],
String,
String>
{
@Override
protected
String
doInBackground(byte[]...
params)
{
String
fname
=
DateFormat.format("yyyyMMddhhmmss",
new
Date()).toString()+".jpg";
Log.i(TAG,
"fname="+fname+";dir="+Environment.getExternalStorageDirectory());
//picture
=
new
File(Environment.getExternalStorageDirectory(),fname);//
create
file
picture
=
new
File(Environment.getExternalStorageDirectory()+"/images/"+fname);
File
file=
picture.getParentFile();
if(!file.exists())
file.mkdir();
try
{
FileOutputStream
fos
=
new
FileOutputStream(picture.getPath());
//
Get
file
output
stream
fos.write(params[0]);
//
Written
to
the
file
fos.close();
}
catch
(Exception
e)
{
e.printStackTrace();
}
return
null;
}
@Override
protected
void
onPostExecute(String
result)
{
//
TODO
Auto-generated
method
stub
super.onPostExecute(result);
Bitmap
bitmap=getDiskBitmap(picture.getPath());
surfaceView.setVisibility(View.GONE);
open_picIcon.setVisibility(View.VISIBLE);
open_picIcon.setImageBitmap(bitmap);
}
}
private
Bitmap
getDiskBitmap(String
pathString)
{
Bitmap
bitmap
=
null;
try
{
File
file
=
new
File(pathString);
if(file.exists())
{
bitmap
=
BitmapFactory.decodeFile(pathString);
}
}
catch
(Exception
e)
{
//
TODO:
handle
exception
}
return
bitmap;
}
//
SurfaceHodler
Callback
handle
to
open
the
camera,
off
camera
and
photo
size
changes
SurfaceHolder.Callback
surfaceCallback
=
new
SurfaceHolder.Callback()
{
public
void
surfaceCreated(SurfaceHolder
holder)
{
Log.i(TAG,
"surfaceCallback====");
camera
=
Camera.open();
//
Turn
on
the
camera
try
{
camera.setPreviewDisplay(holder);
//
Set
Preview
}
catch
(IOException
e)
{
camera.release();//
release
camera
camera
=
null;
}
}
public
void
surfaceChanged(SurfaceHolder
holder,
int
format,
int
width,
int
height)
{
Log.i(TAG,"====surfaceChanged");
Camera.Parameters
parameters
=
camera.getParameters();
//
Camera
parameters
to
obtain
parameters.setPictureFormat(PixelFormat.JPE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年企业团建活动广告服务代理合同范本6篇
- 2025年赛力皮革染料合作协议书
- 2024年综合性仓储运输服务合同标准格式一
- 2024年中国工作台板市场调查研究报告
- 2024年适用双人合资开店协议简明模板版
- 2025年度家电产品品牌保护与侵权纠纷处理合同范本3篇
- 2024年03月重庆中国银行重庆分行春季校园招考笔试历年参考题库附带答案详解
- 2024年中国卫生材料纸管市场调查研究报告
- 2024年中国单扇钢木复合门市场调查研究报告
- 2024年中国化妆套刷市场调查研究报告
- 小学赣美版六年级美术上册第二十课向往和平课件(16张)ppt课件
- 中药饮片购进验收记录表格模板
- TCM远红外发展初析
- 滑坡稳定性计算及滑坡推力计算
- 继教脉图分析 0
- 房地产开发企业土地增值税清算政策与实务操作(成都市)解读
- 房地产估计第九章假设开发法练习题参考答案
- [爆笑小品校园剧本7人]爆笑小品校园剧本
- 第五章 逆向选择
- 高速铁路电气化系统概论PPT优秀课件
- 农村祠堂上梁说辞
评论
0/150
提交评论