拍照可以调用系统的相机进行拍照,拍完保存到相应的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 {

@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.JPEG);// Setting Picture Format

// parameters.set("rotation", 180); // Arbitrary rotation

camera.setDisplayOrientation(0);

parameters.setPreviewSize(400, 300); // Set Photo Size

camera.setParameters(parameters); // Setting camera parameters

camera.startPreview(); // Start Preview

}

public void surfaceDestroyed(SurfaceHolder holder) {

Log.i(TAG,"====surfaceDestroyed");

camera.stopPreview();// stop preview

camera.release(); // Release camera resources

camera = null;

}

};

}

拍完以后自动保存到SD卡中的images目录下

下面是图片存放路径

1.8M 确实有点大,不过是高清图片

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android 简单拍照,android实现简单拍照功能相关推荐

  1. 简单的 Android 拍照并显示以及获取路径后上传

    简单的 Android 拍照并显示以及获取路径后上传 Activity 中的代码,我只贴出重要的事件部分代码 public void doPhoto(View view){destoryBimap() ...

  2. Android调用系统拍照裁剪和选图功能

    最近项目中用到修改用户头像的功能,基本上都是模板代码,现在简单记录一下. 调用系统拍照 private fun openCamera() { //调用相机拍照// 创建File对象,用于存储拍照后的图 ...

  3. Android实现拍照相册图片上传功能

    更改头像功能不像修改信息一样直接提交参数就可以,需要上传图片文件 我就直接贴代码了首先给出布局文件 <ImageViewandroid:id="@+id/iv"android ...

  4. android拍照保存照片方向,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...

    android.jpg 前言 在前几篇文章中介绍了如何调用系统相机拍照和使用Camera1的实现自定义相机拍照.人脸检测等功能 文章传送门: 接下来的几篇文章中,我将给大家介绍如何使用Camera2实 ...

  5. android com.mylhyl,Android 高仿微信朋友圈拍照上传功能

    模仿微信朋友圈发布动态,输入文字支持文字多少高度自增,有一个最小输入框高度,输入文字有限制,不过这些都很easy! 1. photopicker的使用 这是一个支持选择多张图片,点击图片放大,图片之间 ...

  6. android 微信高仿,Android 高仿微信朋友圈拍照上传功能

    模仿微信朋友圈发布动态,输入文字支持文字多少高度自增,有一个最小输入框高度,输入文字有限制,不过这些都很easy! 1. PhotoPicker的使用 这是一个支持选择多张图片,点击图片放大,图片之间 ...

  7. android开发自动拍照,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...

    android.jpg 前言 在前几篇文章中介绍了如何调用系统相机拍照和使用Camera1的实现自定义相机拍照.人脸检测等功能 文章传送门: 接下来的几篇文章中,我将给大家介绍如何使用Camera2实 ...

  8. android拍照功能无预览,Android快速实现无预览拍照功能

    本文实例为大家分享了Android实现无预览拍照功能的具体代码,供大家参考,具体内容如下 实现思路: 把预览的SurfaceView的宽高设置为肉眼看不出的值,例如0.1dp,其他的就是自定义相机的标 ...

  9. android 实现自动拍照,Android自定义相机实现定时拍照功能

    这篇博客为大家介绍Android自定义相机,并且实现倒计时拍照功能. 首先自定义拍照会用到SurfaceView控件显示照片的预览区域,以下是布局文件: activity_main.xml andro ...

  10. 拼图java监听器,Android 简单的实现滑块拼图验证码功能

    实现滑块拼图验证码功能之前已经写过一篇了,上一篇使用的是自定义控件的方式实现这个功能,主要还是想让童鞋们知其然更知其所以然,还没看的童鞋可以先看看Android实现滑块拼图验证码功能这篇. 在项目的开 ...

最新文章

  1. Python 入门 Day4
  2. 提升注意力模块性能dcanet
  3. kaggle账号_机器学习竞赛入门--kaggle篇
  4. 如何让小程序页面更顺滑_小程序怎样让wx.navigateBack更好用的方法实现
  5. 计算机结构介绍,计算机系统结构介绍.pdf
  6. java 求最大公因数_求最大公约数的三种算法(java实现)
  7. 点阵字体显示系列之三:使用ncurses显示汉字
  8. 现在没有可用的软件包 *** ,但是它被其它的软件包引用了 和 E: 无法定位软件包 ***问题解决(思路清晰干货)
  9. HBase完全分布式搭建
  10. 二叉树的存储结构入门(java描述)
  11. 【转】Python 2.x和Python3.x的区别
  12. linux中挂载磁盘步骤
  13. python中eval函数怎么用_python3中eval函数用法简介
  14. secoclient全版本下载分享
  15. 基于Levy飞行策略的改进樽海鞘群算法( LECUSSA) Matlab代码
  16. 为什么苏联打下了如此强的数学基础,俄罗斯却至今无法成为AI强国?
  17. AIR202的lua开发
  18. 六级考研单词之路-三十
  19. 小白股市扫盲系列--美联储加息减息对市场究竟有什么影响?
  20. unity 碰撞检测的四种检测模式

热门文章

  1. android Q HIDL(小屏显示)
  2. 俞伯牙摔琴谢知音的故事
  3. opencv 使用 GPU 加速
  4. html word表格边框变成表格,word表格边框显示不全跨页面显示的解决方法
  5. 代数余子式之和怎么算_小明说养老 | 养老金怎么算之算算过渡性养老金
  6. 腾讯云神笔低代码平台的申请没通过,只能等公测了
  7. 小学计算机京剧脸谱教案,[热门]《戏曲脸谱》小学美术教学案例
  8. 2021年美容师(初级)最新解析及美容师(初级)模拟考试题
  9. 第一篇,怎么增加SYN数据包的大小(syn flood攻击实验)
  10. SPDA-CNN:Unifying Semantic Part Detection and Abstraction for Fine-grained Recognition