androidcamera开发
㈠ android开发自定义Camera设置相片尺寸
public Bitmap Bytes2Bimap(byte[] b) {
if (b.length != 0) {
Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);
// 利用Bitmap对象创建缩略图
bitmap = ThumbnailUtils.extractThumbnail(bitmap, 400, 400);
return bitmap;
} else {
return null;
}
}
这个能设置图片的宽高
Bitmap bm = Bytes2Bimap(data);
FileOutputStream fos = new FileOutputStream(pictureFile);
bm.compress(Bitmap.CompressFormat.JPEG, 50, fos);
这个可以压缩图片的分辨力为原来的50%
㈡ 学习Android camera驱动开发买哪个开发板
像荣品电子的6818开发板、4418开发板都属于中低端,5260开发板属于中高端。当然,要更高端的开发板也有,不过一般做研发、自学这些都已经够了。主要是根据你的学习目的和要求来选择,还有费用水平。
驱动开发的技巧:
驱动开发有套路的不管是用户态驱动还是内核态驱动,基本按照这个套路走,就不会有大问题。特别是初级用户态驱动,是一层很薄的软件,就像一个洋葱剥几层就看到最里面的东西,没太多技术。大部分驱动由于主要做控制和初始化,涉及不到复杂的算法,所以其实编码阶段大部分都不会太难。
㈢ Android Camera 驱动开发入门必备知识有哪些
1:硬件相关:简单的数字电路要懂,看的懂电路图(这个很简单),能根据电路找到相应Camera硬件连接的GPIO,并根据芯片手册配置GPIO为相应的模式;比如GPIO模式,输入IO或输出IO;或配置成PWM模式;不同的模式这个GPIO的工作方式是不同的;
2:Camera驱动:比如ov5640;你要找本linux驱动相关的书看看,比如《linux设备驱动程序》知道简单的linux设备驱动写法;当然工作中Camera驱动不需要你写的,有参考的可以使用,但是参考驱动一般支持实现录像、拍照功能,别的白平衡、对焦等都需要你去自己调试;
3:你要学习V4L2协议,因为驱动导出/dev/video0接口是通过V4L2协议的;上层C的应用也是通过V4L2协议访问/dev/video0的;实际V4L2协议就是通过一些标志linux ioctl()函数和底层驱动通信的;V4L2协议是为了屏蔽各种Camera驱动的不同(比如usb摄像头,mipi接口摄像头)而提供的统一和摄像头驱动通信的规范;
4:你要知道C++的class的相关知识,最好能看到C++的代码,既然你有C的知识,哪把C++的面相对象看懂,知道C++的class就可以了;为什么要懂C++呢?因为Android Camera HAL访问/dev/video0都是用C++写的,二十几个个xxxx.cpp不同的类相互继承实现的;而且你要懂Android HAL层的写法,至少查查资料知道用哪里看;一般都是CameraMole.cpp或CameraHal.cpp;
5:JNI的写法最好以知道一些,至少可以抄就可以,因为这些写法都是固定的,因为调试的过程中有时候你一个人要从java层跟踪代码到HAL层再到驱动;
5:你要会用Linux,因为所有的Android源码都是在Linux下编译的;你要知道ARM架构,交叉编译器;比如arm-linux-gcc;知道怎么编译Android和kernel源码;怎么刷机;怎么调试;最好买块带Camera的Android开发板;
㈣ 安卓camera开发时怎么在预览的时候做镜像功能
使用一些镜像安装器,或者弄个虚拟器,用虚拟机安装测试,或者使用一些虚拟驱动器载入镜像进行安装,很多人都是制作U盘,然后在PE系统里面使用安装器进行安装
㈤ 为什么Android开发中Camera.open()方法不能用,下面点红色报错,api是19
包导错了,应该是android.hardware.Camera这个包下的,不是android.graphics.Camera
㈥ Android开发(摄像头的调用)(大神请进……)
打开摄像头,要 start surfaceiew,当activity执行到onStop()时,要判断,然后关闭surfaceiew。这样应该就不会导致程序force close了。或者楼主您直接把force close的log信息打出来,有log才能准确的分析问题。
㈦ Android开发 camera拍照无法获取Exit信息
private void data2file(byte[] w, String fileName) throws Exception {
FileOutputStream out = null;
try {
out = new FileOutputStream(fileName);
Bitmap bitmap = BitmapFactory.decodeByteArray(w, 0, w.length);
Matrix matrix=new Matrix();
matrix.postScale(1f, 1f);
//旋转图片
int deg = this.getWindowManager().getDefaultDisplay().getRotation();
if (deg == Surface.ROTATION_270) {
degree = 180;
matrix.postRotate(degree);
}
Bitmap dstbmp=Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),
bitmap.getHeight(),matrix,true);
dstbmp.compress(CompressFormat.JPEG, 100, out);
//out.write(w);
out.flush();
out.close();
dstbmp.recycle();
bitmap.recycle();
} catch (Exception e) {
if (out != null)
out.close();
throw e;
}
}
生成图片地址后可以做这样处理,先旋转到合适的角度,再保存。
㈧ Android开发如何调用相机的全景拍摄功能
首先,来了解一下什么是场景模式。
最简单的方法当然是google了,这里有一篇文章讲得比较通俗易懂。
内容如下: 一般而言,数码相机内预先调节好光圈、快门、焦距、测光方式及闪光灯等参数值,以便于那些经验不足的用户拍出有一定质量保证的数码相片。不过用现有的模式也未必能拍出高质量的照片。相当一部份朋友使用的是数码相机的AUTO(自动)模式,而在特定的拍摄环境中,其相片质量当然难以保障。因此为了更加方便初级用户的使用,数码相机厂商在数码相机内加入了数种场景模式,这样就更加方便拍出高质量的照片。目前,数码相机内的场景模式少则有四、五种,多则有二三十种。
有些相机则是通过菜单来选择不同的场景模式以下最常见的八种模式:
风景模式:拍摄风景名胜时,数码相机会把光圈调到最小以增加景深,另外对焦也变成无限远,使相片获得最清晰的效果。
人像模式:用来拍摄人物相片,如证件照。数码相机会把光圈调到最大,做出浅景深的效果。而有些相机还会使用能够表现更强肤色效果的色调、对比度或柔化效果进行拍摄,以突出人像主体。
夜景模式:夜景模式一般有两种,前者使用1/10秒左右的快门进行拍摄,从而有可能导致曝光不足。而后者则使用数秒长的快门曝光时间,以保证相片充分曝光,相片画面也会比较亮。上述两种都使用较小的光圈进行拍摄,同时闪光灯也会关闭。
夜景人像模式:在夜景中拍摄人物(如逛灯会),数码相机通常会使用数秒至1/10秒左右的快门拍摄远处的风景,并使用闪光灯照亮前景的人物主体,闪光灯通常会在快闪关闭前被触发。
动态模式(运动模式):用来拍摄高速移动的物体,数码相机会把快门速度调到较快(1/500秒),或提高ISO感光值。
微距模式:用来拍摄细微的目标如花卉、昆虫等等,数码相机会使用“微距”焦距,并关闭闪光灯。
逆光模式:在一些背光的环境下使用,即主体的背后有较强的光线。相机会采用重点测光以增强曝光的准确性、并增加EV值以避免主体过暗,有些相机还会使用闪光灯进行补光。
全景模式:拍摄超宽幅度的画面(如山脉、大海)时,数码相机会在每张相片后留出多余位置,帮助摄影者连续拍摄多张风景相片,再组成一张超宽的风景照。现在智能手机的摄像头一般都在 5M, 8M, 12M, 高的都有 13M, 如 sony 的Xperia™
ZL L35h手机。可以媲美一般的卡片相机了。也有很多的参数可调,其中就包括了场景模式。MTK android 平台中,它的场景模式设置是写在 cfg_ftbl_custom_raw_main.h 文件中的。
Location:ALPS.ICS***mediatekcustomproject_namehalcameracameracfg_ftbl_custom_raw_main.h
详细代码详细代码
㈨ Android开发 Camera出现问题Fail to connect to camera service
1,手机上有安装安全过滤软件。因为camera属于较为敏感的权限,所以,有些手机安全管家会自动拒绝camera的打开操作。
针对这种错误,可以在手机安全管家软件中,降低一下camera的安全级别,或把自己的APP添加到白名单中。
2,AndroidManifest.xml中没有添加camera的权限申请,对策则是添加<uses-permission android:name="android.permission.CAMERA"/>权限申请。
3,之前对camera打开后,并没有释放掉。
解决对策就是调用下面的处理
camera.stopPreview();
camera.release();
camera = null;
4,内存占用过多,可能导致了自己应用可分配的内存不足了。这个场景的错误差不多是在自己的应用中打开摄像头,对摄像头取得的每一帧数据都进行额外的处理,随着处理次数的增加,如果有没被及时销毁的对象存在,则就极有可能会导致本文开头出现的异常了。针对此种问题,解决的方法就是仔细检查临时创建的对象是否都已经释放掉。
㈩ Android开发 如何打开前置摄像头的代码
找到surficeView
surfaceView = (SurfaceView)findViewById(R.id.surfaceview);
设置它的像素为800x600
surfaceView.getHolder().setFixedSize(800,480);
//下面设置surfaceView不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
然后就是回调
surfaceView.getHolder().addCallback(newSurfaceCallback());
上面的回调类是我们自己定义的,代码如下
private class SurfaceCallback implementsSurfaceHolder.Callback{
@Override
public void surfaceCreated(SurfaceHolderholder) {
try {
camera = Camera.open();//打开硬件摄像头,这里导包得时候一定要注意是android.hardware.Camera
WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);//得到窗口管理器
Display display = wm.getDefaultDisplay();//得到当前屏幕
Camera.Parameters parameters =camera.getParameters();//得到摄像头的参数
parameters.setPreviewSize(display.getWidth(),display.getHeight());//设置预览照片的大小
parameters.setPreviewFrameRate(3);//设置每秒3帧
parameters.setPictureFormat(PixelFormat.JPEG);//设置照片的格式
parameters.setJpegQuality(85);//设置照片的质量
parameters.setPictureSize(display.getHeight(),display.getWidth());//设置照片的大小,默认是和屏幕一样大
camera.setParameters(parameters);
camera.setPreviewDisplay(surfaceView.getHolder());//通过SurfaceView显示取景画面
camera.startPreview();//开始预览
isPreview = true;//设置是否预览参数为真
} catch (IOException e) {
Log.e(TAG, e.toString());
}
}
@Override
public void surfaceChanged(SurfaceHolderholder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolderholder) {
if(camera!=null){
if(isPreview){//如果正在预览
camera.stopPreview();
camera.release();
}
}
}
}