android+手机摄像头,Android手机摄像头的使用

今天开始学习Android摄像头的使用,具体功能包括预览,点击按钮拍照,能后保存到指定的位置。因为现在刚开始学习,所以做这些简单的处理,以后会慢慢增加对图像的各种处理。

因为摄像头的运用涉及到拍摄图像和保存操作,这就会涉及到文件的读写操作,看了下JAVA里面关于文件操作的类,相关的表述如下:

按照数据传输的方向,将字节序列从应用程序传递到外设或外存的流称为输出流,将字节序列从外设或外存传递到应用程序的流称为输出流。

在JAVA IO 包中提供了FileInputStream类和FileOutputStream类用于对文件的输入和输出,与RandomAccessFile类不同的是,这两个类对文件的处理方式是对文件中数据流的顺序读写而不是利用文件指针进行随机定位读写。

对于文件输入流FileInputStream,如果文件输入指向的文件不存在,则系统抛出FileNotFoundException.而输出

例如下面的代码中,在拍照完图片后自动进行保存工作

private PictureCallback

jpegCallback = new PictureCallback(){

@Override

public void

onPictureTaken(byte[] data, Camera camera) {

//

TODO Auto-generated method stub

try

{

button_cancel.setVisibility(View.VISIBLE);

button_snap.setVisibility(View.VISIBLE);

button_save.setVisibility(View.VISIBLE);

//在sd卡的根目录下创建一个名为dirname的文件夹

//Environment.getExternalStorageDirectory()为获取sd卡的根目录

File

file = new File(Environment.getExternalStorageDirectory(),

dirname);

Log.i(TAG,"click

button2:" + file.getAbsolutePath());

//如果这个文件夹存在,则跳过,否则创建一个。

if(!file.exists())

{

file.mkdir();

}

//定义文件的名称为当前时间的毫秒

//数+camera.jpg,形如875camera.jpg filename

= String.valueOf(calendar.get(Calendar.MILLISECOND))+

"camera.jpg";

//实例化一个File 对象 File

n = new File(file,

filename); //用文件n的绝对路径初始化一个文件输出流对象bos

FileOutputStream

bos = new

FileOutputStream(n.getAbsolutePath());

//将data数组里面拍摄到的数据写入filename文件中。 bos.write(data);

bos.close();

//将数据写成bmp格式的图片 // bmp

= BitmapFactory.decodeByteArray(data, 0, data.length);

}

catch (Exception e) {

//

TODO: handle exception

e.printStackTrace();

} } };

绝对路径:是从盘符开始的位置,比如c:\\照片\许慧欣.jpg

相对路径:相对路径是指相对于另一个位置的位置,比如在上面的照片文件夹下面还有另一个文件夹,命名为地图,地图文件夹下面有个文件叫做中国地图.jpg。则这个 中国地图.jpg相对于文件许慧欣.jpg的相对地址为 地图\中国地图.jpg。

相对路径对要给出一个相对的位置,一般可以当做是当前路径开始的路径,比如当前路径为 c:\\照片,则许慧欣.jpg的相对路径就为 许慧欣.jpg,而不用将c:\\照片列出。

所有的程序代码都贴到这上面来,方便以后查看:

TestCameraActivity.java文件如下:

public class TestCameraActivity extends Activity implements

SurfaceHolder.Callback

{

private AutoFocusCallback mAutoFocusCallback =

new AutoFocusCallback();

private static final String TAG

="TestCameraActivity";

private Camera mCamera;

private SurfaceView mSurfaceView;

private SurfaceHolder mHolder;

private Bitmap bmp;

private String dirname="wanping";

private String filename;

private Calendar calendar;

private int flag=3;

private int cnt = 1;

private Button button_save,

button_cancel,button_snap;

@Override

public void

onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

setContentView(R.layout.camera);

mSurfaceView = (SurfaceView)findViewById(R.id.mySurfaceView);

mHolder = mSurfaceView.getHolder();

mHolder.addCallback(TestCameraActivity.this);

mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

calendar = Calendar.getInstance();

button_snap = (Button)findViewById(R.id.btn1);

button_cancel = (Button)findViewById(R.id.btn2);

button_save = (Button)findViewById(R.id.btn3);

mCamera=getCameraInstance();

//点击拍照按钮后执行的动作,实现自动对焦能后拍照

button_snap.setOnClickListener(new Button.OnClickListener(){

@Override

public void

onClick(View v) {

//

TODO Auto-generated method stub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值