[Android] 实现简单的相机程序
2015-01-25 01:46
387 查看
好久没写了,有些东西做过都快忘了,赶紧记一下。
现在来实现一个简单的相机程序。
原文地址/article/5262224.html
当然需要的话可以直接调用系统的camera程序,但自己实现会使用更自由。
呐,既然要用实现相机,那就需要先了解一下调用camera的类android.hardware.camera
strings.xml
经过以上步骤,我们的设备就可以用摄像头进行预览了,预览时随意移动设备还可以自动对焦,效果如下图:
不过,这个是用DDMS截的图,如果是拍照,实际画面尺寸会与看到的稍有差别,原因在代码里也有写。
关于拍照takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback)的使用也很简单,在回调PictureCallback中重写public void onPictureTaken(byte[] data, Camera camera) {}方法,data就是图片数据,用bitmapfactory来decode一下,再处理一下显示的旋转方向与尺寸就ok了,这部分代码有空再补吧。
好了,又复习一遍这个过程发现还是蛮简单的。多看看官方的文档就好。ok,收工睡觉。
参考资料:
如何实现android手机摄像头的的自动对焦
android sdk docs
Feb.2nd
快放假了,年底略忙,项目需要年前赶个版本出来。
把上次的拍照过程补一下:
主要是拍照的回调方法,也就对拍照得到的数据按自己的需求处理一下,简单地decode成Bitmap就可以,然后加你想要的动画,另外加一些滤镜啊什么的效果,也就是一些数字图像处理算法,这个不在拍照范畴之内。下面的方法我仅仅对照片方向做了处理,然后缩放0.8倍在主界面显示(懒得再写个view放照片了,就用imageview显示,为了有点差别就缩小图片了
写好回调后在takePhoto按钮事件下补充:
在back按钮下补充:
cameraView最后补充代码:
为了让mainActivity能得到在camera里的按钮事件反馈,在cameraView中加两个接口:
然后在MainActivity添加以下代码:
mPhoto是一个ImageView
以上,按下拍照即可在主界面看到拍照得到的画面:
如果还需要完整代码请持续关注,我有空把Github整理好了会发出github的地址~~
现在来实现一个简单的相机程序。
原文地址/article/5262224.html
当然需要的话可以直接调用系统的camera程序,但自己实现会使用更自由。
呐,既然要用实现相机,那就需要先了解一下调用camera的类android.hardware.camera
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Demo_camera</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> <string name="camera_btn_back">Back</string> <string name="camera_btn_takephoto">TakePic</string> <string name="main_btn_open_camera">Open Camera</string> <color name="RoyalBlue">#4169E1</color> </resources>
strings.xml
经过以上步骤,我们的设备就可以用摄像头进行预览了,预览时随意移动设备还可以自动对焦,效果如下图:
不过,这个是用DDMS截的图,如果是拍照,实际画面尺寸会与看到的稍有差别,原因在代码里也有写。
关于拍照takePicture(Camera.ShutterCallback, Camera.PictureCallback, Camera.PictureCallback, Camera.PictureCallback)的使用也很简单,在回调PictureCallback中重写public void onPictureTaken(byte[] data, Camera camera) {}方法,data就是图片数据,用bitmapfactory来decode一下,再处理一下显示的旋转方向与尺寸就ok了,这部分代码有空再补吧。
好了,又复习一遍这个过程发现还是蛮简单的。多看看官方的文档就好。ok,收工睡觉。
参考资料:
如何实现android手机摄像头的的自动对焦
android sdk docs
Feb.2nd
快放假了,年底略忙,项目需要年前赶个版本出来。
把上次的拍照过程补一下:
主要是拍照的回调方法,也就对拍照得到的数据按自己的需求处理一下,简单地decode成Bitmap就可以,然后加你想要的动画,另外加一些滤镜啊什么的效果,也就是一些数字图像处理算法,这个不在拍照范畴之内。下面的方法我仅仅对照片方向做了处理,然后缩放0.8倍在主界面显示(懒得再写个view放照片了,就用imageview显示,为了有点差别就缩小图片了
private final class MyPictureCallback implements PictureCallback { @Override public void onPictureTaken(byte[] data, Camera camera) { // TODO Auto-generated method stub try { Bitmap bitmapRotate = BitmapFactory.decodeByteArray(data, 0, data.length); Bitmap mBmp = bitmapRotate; int nDegree = getPictureDegree(mActivity, mCameraInfo); if (nDegree != 0) { Matrix matrix = new Matrix(); matrix.preRotate(nDegree); mBmp = Bitmap.createBitmap(bitmapRotate, 0, 0, bitmapRotate.getWidth(), bitmapRotate.getHeight(), matrix, true); } Bitmap bmpScale = Bitmap.createScaledBitmap(mBmp, (int) (mScreenWidth * 0.8), (int) (mScreenHeight * 0.8), true); if (mListener != null) mListener.onTakePic(bmpScale); closeCamera(); } catch (Exception e) { e.printStackTrace(); } } }
写好回调后在takePhoto按钮事件下补充:
if (mCamera != null) mCamera.takePicture(null, null, new MyPictureCallback());
在back按钮下补充:
takePicCancle();
cameraView最后补充代码:
public void closeCamera() { if (mCamera != null) { mCamera.stopPreview(); mCamera.release(); // 释放照相机 mCamera = null; mCameraInfo = null; } } public void takePicCancle() { closeCamera(); // sigCameraCancle.emit(); if (mListener != null) mListener.onBack(); }
为了让mainActivity能得到在camera里的按钮事件反馈,在cameraView中加两个接口:
public interface CameraViewListener { public void onTakePic(Bitmap bmp); public void onBack(); } private CameraViewListener mListener; public void setListener(CameraViewListener listener) { mListener = listener; }
然后在MainActivity添加以下代码:
implements CameraViewListener
implements CameraViewListener mCameraView.setListener(this); @Override public void onTakePic(Bitmap bmp) { // TODO Auto-generated method stub mVgCamera.setVisibility(View.GONE); mPhoto.setVisibility(View.VISIBLE); mPhoto.setImageBitmap(bmp); } @Override public void onBack() { // TODO Auto-generated method stub mBtnCamera.setVisibility(View.VISIBLE); mVgCamera.setVisibility(View.GONE); }
mPhoto是一个ImageView
<ImageView android:id="@+id/main_photo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:visibility="gone" />
以上,按下拍照即可在主界面看到拍照得到的画面:
如果还需要完整代码请持续关注,我有空把Github整理好了会发出github的地址~~
相关文章推荐
- [Android]实现简单的相机程序过年要放假加班到现在我也是醉了
- Android调用系统相机拍照,并且模仿实现水印相机简单功能
- Android调用系统相机简单实现
- 简单谈谈android自定义相机的实现(上 android.hardware.Camera)
- Android客户端简单的聊天程序实现
- Android简单的打电话程序的实现_学员原创
- Android开发笔记之简单基站定位程序的实现
- Android简单调用相机Camera功能,实现打开照相功能
- Android调用系统相机拍照,并且模仿实现水印相机简单功能
- Android:程序锁功能的简单实现
- Android学习十二:跑马灯程序实现(简单联系)
- Android实现的简单蓝牙程序示例
- android客户端简单的聊天程序实现
- Android 学习笔记之如何实现简单相机功能
- Android简单调用相机Camera功能,实现打开照相功能
- android 客户端简单的聊天程序实现
- 简单实现Android闹钟程序 附源码
- Android调用系统相机拍照,并且模仿实现水印相机简单功能
- Android程序:简单的SimpleAdapter实现(OnItemClickListener,OnScrollListener)
- 一个简单的Android程序,JNI实现Native C/C++