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 {
@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实现简单拍照功能相关推荐
- 简单的 Android 拍照并显示以及获取路径后上传
简单的 Android 拍照并显示以及获取路径后上传 Activity 中的代码,我只贴出重要的事件部分代码 public void doPhoto(View view){destoryBimap() ...
- Android调用系统拍照裁剪和选图功能
最近项目中用到修改用户头像的功能,基本上都是模板代码,现在简单记录一下. 调用系统拍照 private fun openCamera() { //调用相机拍照// 创建File对象,用于存储拍照后的图 ...
- Android实现拍照相册图片上传功能
更改头像功能不像修改信息一样直接提交参数就可以,需要上传图片文件 我就直接贴代码了首先给出布局文件 <ImageViewandroid:id="@+id/iv"android ...
- android拍照保存照片方向,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...
android.jpg 前言 在前几篇文章中介绍了如何调用系统相机拍照和使用Camera1的实现自定义相机拍照.人脸检测等功能 文章传送门: 接下来的几篇文章中,我将给大家介绍如何使用Camera2实 ...
- android com.mylhyl,Android 高仿微信朋友圈拍照上传功能
模仿微信朋友圈发布动态,输入文字支持文字多少高度自增,有一个最小输入框高度,输入文字有限制,不过这些都很easy! 1. photopicker的使用 这是一个支持选择多张图片,点击图片放大,图片之间 ...
- android 微信高仿,Android 高仿微信朋友圈拍照上传功能
模仿微信朋友圈发布动态,输入文字支持文字多少高度自增,有一个最小输入框高度,输入文字有限制,不过这些都很easy! 1. PhotoPicker的使用 这是一个支持选择多张图片,点击图片放大,图片之间 ...
- android开发自动拍照,Android:Camera2开发详解(上):实现预览、拍照、保存照片等功能...
android.jpg 前言 在前几篇文章中介绍了如何调用系统相机拍照和使用Camera1的实现自定义相机拍照.人脸检测等功能 文章传送门: 接下来的几篇文章中,我将给大家介绍如何使用Camera2实 ...
- android拍照功能无预览,Android快速实现无预览拍照功能
本文实例为大家分享了Android实现无预览拍照功能的具体代码,供大家参考,具体内容如下 实现思路: 把预览的SurfaceView的宽高设置为肉眼看不出的值,例如0.1dp,其他的就是自定义相机的标 ...
- android 实现自动拍照,Android自定义相机实现定时拍照功能
这篇博客为大家介绍Android自定义相机,并且实现倒计时拍照功能. 首先自定义拍照会用到SurfaceView控件显示照片的预览区域,以下是布局文件: activity_main.xml andro ...
- 拼图java监听器,Android 简单的实现滑块拼图验证码功能
实现滑块拼图验证码功能之前已经写过一篇了,上一篇使用的是自定义控件的方式实现这个功能,主要还是想让童鞋们知其然更知其所以然,还没看的童鞋可以先看看Android实现滑块拼图验证码功能这篇. 在项目的开 ...
最新文章
- Python 入门 Day4
- 提升注意力模块性能dcanet
- kaggle账号_机器学习竞赛入门--kaggle篇
- 如何让小程序页面更顺滑_小程序怎样让wx.navigateBack更好用的方法实现
- 计算机结构介绍,计算机系统结构介绍.pdf
- java 求最大公因数_求最大公约数的三种算法(java实现)
- 点阵字体显示系列之三:使用ncurses显示汉字
- 现在没有可用的软件包 *** ,但是它被其它的软件包引用了 和 E: 无法定位软件包 ***问题解决(思路清晰干货)
- HBase完全分布式搭建
- 二叉树的存储结构入门(java描述)
- 【转】Python 2.x和Python3.x的区别
- linux中挂载磁盘步骤
- python中eval函数怎么用_python3中eval函数用法简介
- secoclient全版本下载分享
- 基于Levy飞行策略的改进樽海鞘群算法( LECUSSA) Matlab代码
- 为什么苏联打下了如此强的数学基础,俄罗斯却至今无法成为AI强国?
- AIR202的lua开发
- 六级考研单词之路-三十
- 小白股市扫盲系列--美联储加息减息对市场究竟有什么影响?
- unity 碰撞检测的四种检测模式
热门文章
- android Q HIDL(小屏显示)
- 俞伯牙摔琴谢知音的故事
- opencv 使用 GPU 加速
- html word表格边框变成表格,word表格边框显示不全跨页面显示的解决方法
- 代数余子式之和怎么算_小明说养老 | 养老金怎么算之算算过渡性养老金
- 腾讯云神笔低代码平台的申请没通过,只能等公测了
- 小学计算机京剧脸谱教案,[热门]《戏曲脸谱》小学美术教学案例
- 2021年美容师(初级)最新解析及美容师(初级)模拟考试题
- 第一篇,怎么增加SYN数据包的大小(syn flood攻击实验)
- SPDA-CNN:Unifying Semantic Part Detection and Abstraction for Fine-grained Recognition