【移动应用开发技术】android如何实现简单拍照功能_第1页
【移动应用开发技术】android如何实现简单拍照功能_第2页
【移动应用开发技术】android如何实现简单拍照功能_第3页
【移动应用开发技术】android如何实现简单拍照功能_第4页
【移动应用开发技术】android如何实现简单拍照功能_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论