安卓拍照软件手机拍照镜头怎么调远点

16093人阅读
转自:/761385/archive/4226.html
Android提供了Camera来控制拍照,步骤如下:
(1)调用Camera的open()方法打开相机。
(2)调用Camera的getParameters()获取拍照参数,该方法返回一个Cmera.Parameters对象。
(3)调用Camera.Parameters对象对照相的参数进行设置。
(4)调用Camera的setParameters(),并将Camera.Parameters对象作为参数传入,这样就可以对拍照进行参数控制,Android2.3.3以后不用设置。
(5)调用Camerade的startPreview()的方法开始预览取景,在之前需要调用Camera的setPreviewDisplay(SurfaceHolder holder)设置使用哪个SurfaceView来显示取得的图片。
(6)调用Camera的takePicture()方法进行拍照。
(7)程序结束时,要调用Camera的stopPreview()方法停止预览,并且通过Camera.release()来释放资源。
需要赋予Camera的权限:
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE&/&
&uses-permission android:name=&android.permission.MOUNT_UNMOUNT_FILESYSTEMS&/&
&uses-permission android:name=&android.permission.CAMERA&/&
下面上代码:
package com.lyj.camera;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.CameraInfo;
import android.hardware.Camera.Parameters;
import android.hardware.Camera.PictureCallback;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton;
import android.widget.ImageView;
public class MyCameraActivity extends Activity implements SurfaceHolder.Callback {
private ImageView back, position;//返回和切换前后置摄像头
private SurfaceView surface;
private ImageButton shutter;//快门
private SurfaceHolder holder;
private Camera camera;//声明相机
private String filepath = &&;//照片保存路径
private int cameraPosition = 1;//0代表前置摄像头,1代表后置摄像头
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//没有标题
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//拍照过程屏幕一直处于高亮
//设置手机屏幕朝向,一共有7种
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
//SCREEN_ORIENTATION_BEHIND: 继承Activity堆栈中当前Activity下面的那个Activity的方向
//SCREEN_ORIENTATION_LANDSCAPE: 横屏(风景照) ,显示时宽度大于高度
//SCREEN_ORIENTATION_PORTRAIT: 竖屏 (肖像照) , 显示时高度大于宽度
//SCREEN_ORIENTATION_SENSOR
由重力感应器来决定屏幕的朝向,它取决于用户如何持有设备,当设备被旋转时方向会随之在横屏与竖屏之间变化
//SCREEN_ORIENTATION_NOSENSOR: 忽略物理感应器——即显示方向与物理感应器无关,不管用户如何旋转设备显示方向都不会随着改变(&unspecified&设置除外)
//SCREEN_ORIENTATION_UNSPECIFIED: 未指定,此为默认值,由Android系统自己选择适当的方向,选择策略视具体设备的配置情况而定,因此不同的设备会有不同的方向选择
//SCREEN_ORIENTATION_USER: 用户当前的首选方向
setContentView(R.layout.main);
back = (ImageView) findViewById(R.id.camera_back);
position = (ImageView) findViewById(R.id.camera_position);
surface = (SurfaceView) findViewById(R.id.camera_surface);
shutter = (ImageButton) findViewById(R.id.camera_shutter);
holder = surface.getHolder();//获得句柄
holder.addCallback(this);//添加回调
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//surfaceview不维护自己的缓冲区,等待屏幕渲染引擎将内容推送到用户面前
//设置监听
back.setOnClickListener(listener);
position.setOnClickListener(listener);
shutter.setOnClickListener(listener);
//响应点击事件
OnClickListener listener = new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.camera_back:
MyCameraActivity.this.finish();
case R.id.camera_position:
//切换前后摄像头
int cameraCount = 0;
CameraInfo cameraInfo = new CameraInfo();
cameraCount = Camera.getNumberOfCameras();//得到摄像头的个数
for(int i = 0; i & cameraCount; i
Camera.getCameraInfo(i, cameraInfo);//得到每一个摄像头的信息
if(cameraPosition == 1) {
//现在是后置,变更为前置
if(cameraInfo.facing
== Camera.CameraInfo.CAMERA_FACING_FRONT) {//代表摄像头的方位,CAMERA_FACING_FRONT前置
CAMERA_FACING_BACK后置
camera.stopPreview();//停掉原来摄像头的预览
camera.release();//释放资源
camera = null;//取消原来摄像头
camera = Camera.open(i);//打开当前选中的摄像头
camera.setPreviewDisplay(holder);//通过surfaceview显示取景画面
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
camera.startPreview();//开始预览
cameraPosition = 0;
//现在是前置, 变更为后置
if(cameraInfo.facing
== Camera.CameraInfo.CAMERA_FACING_BACK) {//代表摄像头的方位,CAMERA_FACING_FRONT前置
CAMERA_FACING_BACK后置
camera.stopPreview();//停掉原来摄像头的预览
camera.release();//释放资源
camera = null;//取消原来摄像头
camera = Camera.open(i);//打开当前选中的摄像头
camera.setPreviewDisplay(holder);//通过surfaceview显示取景画面
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
camera.startPreview();//开始预览
cameraPosition = 1;
case R.id.camera_shutter:
camera.autoFocus(new AutoFocusCallback() {//自动对焦
public void onAutoFocus(boolean success, Camera camera) {
// TODO Auto-generated method stub
if(success) {
//设置参数,并拍照
Parameters params = camera.getParameters();
params.setPictureFormat(PixelFormat.JPEG);//图片格式
params.setPreviewSize(800, 480);//图片大小
camera.setParameters(params);//将参数设置到我的camera
camera.takePicture(null, null, jpeg);//将拍摄到的照片给自定义的对象
/*surfaceHolder他是系统提供的一个用来设置surfaceView的一个对象,而它通过surfaceView.getHolder()这个方法来获得。
Camera提供一个setPreviewDisplay(SurfaceHolder)的方法来连接*/
//SurfaceHolder.Callback,这是个holder用来显示surfaceView 数据的接口,他必须实现以下3个方法
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
// TODO Auto-generated method stub
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
//当surfaceview创建时开启相机
if(camera == null) {
camera = Camera.open();
camera.setPreviewDisplay(holder);//通过surfaceview显示取景画面
camera.startPreview();//开始预览
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
//当surfaceview关闭时,关闭预览并释放资源
camera.stopPreview();
camera.release();
camera = null;
holder = null;
surface = null;
//创建jpeg图片回调数据对象
PictureCallback jpeg = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
// TODO Auto-generated method stub
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
//自定义文件保存路径
以拍摄时间区分命名
filepath = &/sdcard/Messages/MyPictures/&
new SimpleDateFormat(&yyyyMMddHHmmss&).format(new Date())
File file = new File(filepath);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);//将图片压缩的流里面
bos.flush();// 刷新此缓冲区的输出流
bos.close();// 关闭此输出流并释放与此流有关的所有系统资源
camera.stopPreview();//关闭预览 处理数据
camera.startPreview();//数据处理完后继续开始预览
bitmap.recycle();//回收bitmap空间
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1460041次
积分:15209
积分:15209
排名:第306名
原创:20篇
转载:913篇
评论:196条
(5)(3)(13)(6)(22)(14)(13)(19)(26)(50)(9)(12)(13)(47)(22)(31)(29)(18)(26)(12)(6)(23)(5)(12)(4)(10)(12)(79)(44)(86)(12)(9)(7)(21)(6)(10)(14)(23)(30)(4)(1)(3)(5)(3)(9)(2)(16)(3)(17)(5)(5)(8)(2)(3)(3)(20)(10)(14)(3)第3页 :详细测试
  如果说要评价一辆汽车的动力有多大,那就看它采用什么样的发动机,而拍照手机中的镜头就好比汽车中的发动机,决定着照片的最终成像效果。但由于本次参测各个产品定位不同,因此采用的镜头也有落差,因此,在评价样片之前,我们先来了解下这8款参测手机的镜头部分,并对其进行对比评分。
  硬件评分标准:
  1、镜头评分:目前1300万像素为主流,基础分数为2分,高于1300万像素加1分,低于则减1分,最高分数3分。而前置镜头200万为主流,基础分数为1分,高于200万像素加0.5分,低于则减0.5分,最高分数1.5分。(介于OPPO N1只拥有一颗摄像头,并可206°旋转使用,为公平起见,前置摄像头给予0.5分。)
   2、感光元件:1/3.06英寸为目前的主流,基础分为1.5分。低于此则扣0.5分,高于则加0.5分。最高分数2分。
  3、光圈:F2.2为目前的主流,基础分为3分。光圈小于F2.2则扣0.5分,高于则加0.5分。最高分数3.5分
  索尼Z1
  索尼Z1给用户最大印象就是它采用了2070万像素的G级镜头,也是目前索尼旗下最顶级的镜头配件。在参数方面,G镜头拥有27mm广角和 F/2.0大光圈,Bionz高速图像处理器在功能方面,可降低噪点,增强低光拍摄效果。另外,索尼Z1的照设置选项也非常丰富功能,支持7种拍照模式,分别是:高级自动(输出800万像素)、手动(输出2000万像素)、时光平移、图片效果、全景扫描、AR效果以及Info-eye。
  三星Note3
  作为一线国际大牌,三星的研发能力同样不俗,在硬件方面,采用了后置1300万像素镜头,同时搭载了高亮度的LED补光灯,拥有超高解析力,最高可以拍摄4K视频。
  三星GALAXY S4 Zoom
  三星GALAXY S4 Zoom搭载了1600万像素背照式CMOS传感器,尺寸为1/2.3英寸,支持10倍光学变焦和OIS光学防抖功能,配备氙气闪光灯。等效35mm焦距24mm-240mm,广角端最大光圈为F/3.1,长焦端最大光圈为F/6.3。可以说,三星Zoom基本上就是把三星的WB30F紧凑型数码相机变成了一部手机,在具备专业级拍照水平的同时还可以满足通话等需求,我们也可以近似的理解成专业相机级手机。
  LG这款G2旗舰手机采用的是1300万像素主摄像头,辅以LED补光灯,加入了OIS光学防抖,可以做到3级的防抖效果。该机提供多种参数设置,可以采用语音来控制快门拍摄,可调节亮度、对焦、ISO、白平衡、色彩效果、计时器等等参数。并且内置12种拍摄模式,如橡皮擦拍摄、动态色调、全景、VR全景、连拍、人面优化、双摄像头拍摄、时间捕捉拍摄、智能自动、运动、夜间,但我想用户用的最频繁的依然会是正常或智能自动这两种模式。。
  HTC One
  在各大厂商都在广泛使用千万级像素镜头时,HTC却采用了一颗只有400百万像素的镜头,相信大家对此都会怀有疑问。对此HTC也进行了不少官方声明,重点宣传了高像素并不等于高画质的说法。其实HTC采用的并非传统400万像素镜头,而是全新的400万像素Ultra Pixel(超像素技术)传感器。这个在前文中,我们也曾提过,虽然像素低,但拍出来的照片质量却并非是采用传统CMOS 400万像素镜头可以比的。不过对于普通用户来说,难免会对HTC One使用的镜头产生误解。
  金立E7
  金立作为国内老牌手机厂商,在之前一直以主打商务手机为主,E7的问世也金立正式宣布进入主流手机市场的一款重要产品。该机采用了1600万像素的镜头作为主摄像头,拥有1/2.3寸超大感光面积,是目前安卓手机里最大的CMOS传感器。而前置摄像头也达到了800万像素,也是目前参测机型中最高像素的一款 产品。
  Nubia Z5S
  Nubia虽然是一个新兴的互联网手机品牌,但与其他新兴势力不同的是,它的后台是国内老牌手机中兴。拥有多年的产品研发级制造经验,因此,该品牌推出后,旗下产品便受到了广大用户好评。在拍照方面,Z5S后置摄像头采用第二代SONY RS系列感光元件的1300万像素堆栈式,配备F2.2大光圈,在拍摄时能更好的适应光线,提高快门速度,进行虚化背景。而前置摄像头的像素为500万,在安卓手机中,也达到了一个较高的水平。
  OPPO N1
  OPPO N1是一款非常具有特色的拍照手机,虽然与其他手机相比,只有一颗摄像头,但它支持支持206°自由旋转拍摄,一颗摄像头却能当作两颗来用。拥有较高的可玩性。在像素方面,达到了1300万像素旗舰水平。同时还配备了双LED补光灯进行辅助。
第3页:详细测试
(责任编辑:丁伟)
&&&&&&</div
5.5寸屏幕,骁龙615处理器,多彩纹理后壳...
主演:黄晓明/陈乔恩/乔任梁/谢君豪/吕佳容/戚迹
主演:陈晓/陈妍希/张馨予/杨明娜/毛晓彤/孙耀琦
主演:陈键锋/李依晓/张迪/郑亦桐/张明明/何彦霓
主演:尚格?云顿/乔?弗拉尼甘/Bianca Bree
主演:艾斯?库珀/ 查宁?塔图姆/ 乔纳?希尔
baby14岁写真曝光
李冰冰向成龙撒娇争宠
李湘遭闺蜜曝光旧爱
美女模特教老板走秀
曝搬砖男神奇葩择偶观
柳岩被迫成赚钱工具
大屁小P虐心恋
匆匆那年大结局
乔杉遭粉丝骚扰
男闺蜜的尴尬初夜
社区热帖推荐
经常睡地板……[]
客服热线:86-10-
客服邮箱:

我要回帖

更多关于 安卓 远程调试 的文章

 

随机推荐