首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何设置变焦android摄像头vision.barcode-scanner接口

在Android设备上设置变焦功能可以通过使用Camera.Parameters类来实现。然而,从Android 5.0开始,Camera类已被弃用,推荐使用Camera2 API来实现相机功能。

以下是使用Camera2 API设置变焦功能的步骤:

  1. 获取相机设备:
    • 使用CameraManager类获取相机设备的实例。
    • 通过getCameraIdList()方法获取可用的相机设备列表。
    • 选择所需的相机设备ID。
  2. 打开相机设备:
    • 使用CameraManageropenCamera()方法打开相机设备。
    • 实现CameraDevice.StateCallback接口以处理相机设备的打开状态。
  3. 创建相机预览会话:
    • 使用CameraDevicecreateCaptureSession()方法创建相机预览会话。
    • 实现CameraCaptureSession.StateCallback接口以处理相机预览会话的状态。
  4. 设置变焦功能:
    • 使用CameraCharacteristics类获取相机设备的特性。
    • 通过CameraCharacteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM)方法获取最大数字变焦级别。
    • 使用CameraCharacteristics.get(CameraCharacteristics.CONTROL_MAX_REGIONS_AF)方法获取相机设备支持的自动对焦区域数量。
    • 使用CameraCharacteristics.get(CameraCharacteristics.CONTROL_ZOOM_RATIO_RANGE)方法获取相机设备支持的变焦级别范围。
    • 通过CameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)方法创建捕获请求。
    • 使用CaptureRequest.Builder.set(CaptureRequest.SCALER_CROP_REGION, Rect)方法设置变焦级别。
  5. 开始预览:
    • 使用CameraCaptureSession.setRepeatingRequest()方法开始相机预览。

以下是一个示例代码,演示如何设置变焦功能:

代码语言:java
复制
import android.Manifest;
import android.content.pm.PackageManager;
import android.graphics.Rect;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CaptureRequest;
import android.os.Bundle;
import android.util.Log;
import android.util.Range;
import android.view.Surface;
import android.view.TextureView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import java.util.Arrays;

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CAMERA_PERMISSION = 200;
    private static final String TAG = "CameraZoomExample";

    private TextureView textureView;
    private CameraManager cameraManager;
    private String cameraId;
    private CameraDevice cameraDevice;
    private CameraCaptureSession cameraCaptureSession;
    private CaptureRequest.Builder captureRequestBuilder;
    private Rect zoomRect;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textureView = findViewById(R.id.textureView);
        cameraManager = (CameraManager) getSystemService(CAMERA_SERVICE);

        textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
            @Override
            public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
                openCamera();
            }

            @Override
            public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int width, int height) {
                // Handle surface texture size change if needed
            }

            @Override
            public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
                return false;
            }

            @Override
            public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
                // Handle surface texture update if needed
            }
        });
    }

    private void openCamera() {
        try {
            String[] cameraIds = cameraManager.getCameraIdList();
            if (cameraIds.length == 0) {
                Toast.makeText(this, "No camera available", Toast.LENGTH_SHORT).show();
                return;
            }
            cameraId = cameraIds[0];

            if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
                return;
            }

            cameraManager.openCamera(cameraId, new CameraDevice.StateCallback() {
                @Override
                public void onOpened(@NonNull CameraDevice camera) {
                    cameraDevice = camera;
                    createCameraPreviewSession();
                }

                @Override
                public void onDisconnected(@NonNull CameraDevice camera) {
                    camera.close();
                    cameraDevice = null;
                }

                @Override
                public void onError(@NonNull CameraDevice camera, int error) {
                    camera.close();
                    cameraDevice = null;
                    Toast.makeText(MainActivity.this, "Camera open failed", Toast.LENGTH_SHORT).show();
                }
            }, null);
        } catch (CameraAccessException e) {
            Log.e(TAG, "Failed to open camera", e);
            Toast.makeText(this, "Failed to open camera", Toast.LENGTH_SHORT).show();
        }
    }

    private void createCameraPreviewSession() {
        try {
            SurfaceTexture surfaceTexture = textureView.getSurfaceTexture();
            surfaceTexture.setDefaultBufferSize(textureView.getWidth(), textureView.getHeight());
            Surface surface = new Surface(surfaceTexture);

            captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
            captureRequestBuilder.addTarget(surface);

            cameraDevice.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() {
                @Override
                public void onConfigured(@NonNull CameraCaptureSession session) {
                    if (cameraDevice == null) {
                        return;
                    }

                    cameraCaptureSession = session;
                    try {
                        session.setRepeatingRequest(captureRequestBuilder.build(), null, null);
                        setZoomLevel(2.0f); // Set zoom level here
                    } catch (CameraAccessException e) {
                        Log.e(TAG, "Failed to start camera preview", e);
                        Toast.makeText(MainActivity.this, "Failed to start camera preview", Toast.LENGTH_SHORT).show();
                    }
                }

                @Override
                public void onConfigureFailed(@NonNull CameraCaptureSession session) {
                    Toast.makeText(MainActivity.this, "Failed to configure camera", Toast.LENGTH_SHORT).show();
                }
            }, null);
        } catch (CameraAccessException e) {
            Log.e(TAG, "Failed to create camera preview session", e);
            Toast.makeText(this, "Failed to create camera preview session", Toast.LENGTH_SHORT).show();
        }
    }

    private void setZoomLevel(float zoomLevel) {
        try {
            CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId);
            float maxZoom = characteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM);
            Rect sensorRect = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);

            float zoomRatio = 1.0f + (maxZoom - 1.0f) * zoomLevel;
            int centerX = sensorRect.width() / 2;
            int centerY = sensorRect.height() / 2;
            int deltaX = (int) (0.5f * sensorRect.width() / zoomRatio);
            int deltaY = (int) (0.5f * sensorRect.height() / zoomRatio);

            zoomRect = new Rect(centerX - deltaX, centerY - deltaY, centerX + deltaX, centerY + deltaY);
            captureRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoomRect);
            cameraCaptureSession.setRepeatingRequest(captureRequestBuilder.build(), null, null);
        } catch (CameraAccessException e) {
            Log.e(TAG, "Failed to set zoom level", e);
            Toast.makeText(this, "Failed to set zoom level", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        closeCamera();
    }

    private void closeCamera() {
        if (cameraCaptureSession != null) {
            cameraCaptureSession.close();
            cameraCaptureSession = null;
        }
        if (cameraDevice != null) {
            cameraDevice.close();
            cameraDevice = null;
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == REQUEST_CAMERA_PERMISSION) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                openCamera();
            } else {
                Toast.makeText(this, "Camera permission denied", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

请注意,上述代码仅涵盖了设置变焦功能的基本步骤,并未包含完整的错误处理和异常情况处理。在实际应用中,您可能需要根据需求进行适当的修改和扩展。

对于vision.barcode-scanner接口,根据提供的信息无法确定具体是哪个厂商的产品或服务。如果您需要使用腾讯云相关的产品和服务来实现条码扫描功能,您可以考虑使用腾讯云的OCR(Optical Character Recognition)服务,该服务提供了条码识别功能。您可以通过访问腾讯云官方网站或与腾讯云客服联系来获取更多关于OCR服务的详细信息和相关产品介绍链接地址。

请注意,以上答案仅供参考,具体的实现方法和推荐的产品可能因实际需求和环境而有所不同。建议在实际开发中根据具体情况进行调整和选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android RTMP】Android Camera 视频数据采集预览 ( 视频采集相关概念 | 摄像头预览参数设置 | 摄像头预览数据回调接口 )

文章目录 一、 Android 端数据采集涉及到的相关概念 二、 Camera 预览图像尺寸设置 三、 获取摄像头采集的数据格式 一、 Android 端数据采集涉及到的相关概念 ---- 1 ....Android 摄像头常量 : Android 中使用特定的常量指定使用哪个摄像头 ; ① 指定后摄像头 : 使用 Camera.CameraInfo.CAMERA_FACING_BACK 常量 , 指定后摄像头...Camera 预览尺寸 : 但是实际上 , Android 系统中的 Camera 摄像头的尺寸参数必须从几个预置的预览尺寸中选择 , 这些预览尺寸是厂家设定好的 , 用户无法设置 Camera 的语言尺寸...设置数据预览回调接口 : ① 设置方法 : Android 中的摄像头 Camera 通过调用 setPreviewCallbackWithBuffer 函数 , 传递一个回调接口对象 ; ② 调用的...采集到的图像数据 : 这是摄像头采集的图像数据 , Android 中的 Camera 摄像头采集数据成功后 , 就会回调该 PreviewCallback 接口中的 onPreviewFrame 方法

1.4K10
  • 接口教程】EasyCVR如何通过接口设置平台级联?

    为了便于用户的集成、调用与二次开发需求,我们也提供了丰富的API接口,感兴趣的用户可以前往官方接口文档进行查阅。今天和大家分享一下EasyCVR如何通过接口设置平台级联。...操作十分简单,具体步骤如下:1)首先,调用登录接口,如图所示:?2)接着,使用post请求调用api/v1/cascade/add接口,相应的级联信息用json去传递。返回OK则表示设置成功:?...3)配置成功后,调用/api/v1/cascade/list接口来获取级联列表:?4)看到返回参数online为true,即代表级联在线,表明配置成功:?5)至此就完成了平台级联接口调用了。...关于接口调用的技术教程,我们此前也分享过很多,有需要的用户可以翻阅我们往期的文章进行了解。若有技术上的疑问,也可以联系我们进行协助。

    97130

    接口调用教程】EasyNVR如何通过API接口设置录像计划?

    为了满足用户的集成与二次开发需求,我们也提供了丰富的API接口供用户调用。有需要的用户可参照官方接口文档进行操作。若有技术上的疑问,也可以联系我们进行协助。...今天和大家分享一下:EasyNVR如何通过接口设置录像计划。 录像计划功能是指,用户可以设定在指定时间内开启录像(如周一至周日中,某天某个时间段内),其他时间不录像等。...如何通过接口设置录像计划?操作步骤如下: 1)首先,先调用登录接口获取token: 2)接着,获取设备列表接口来获取想要设置录像计划的通道,如图: 3)确定选择的通道之后,设置录像计划。...这里要注意,需要用post请求,然后选择模板和天数,此处需要设置ondemand参数为0,代表为非按需模式。...设置好之后,就可以按照录像计划的时间正常录像了,如图: EasyNVR属于软硬一体的产品,既有硬件版,也有软件版,两者功能类似,均具备视频直播监控、录像、检索与回看、存储、国标级联等视频能力,可支持将接入的视频流进行全平台

    1.1K30

    华为P40,P40 Pro,P40 Pro +

    P30系列的前置摄像头有一个槽口,而P40系列则选择了药丸状的打孔,以适应其双前置摄像头设置。考虑到它的大尺寸,它并不漂亮。...P40 Pro +:10倍光学(240mm等效)潜望镜变焦,8MP,f / 4.4,OIS P40 Pro和Pro +:(ToF)深度传感器 所有型号:双自拍相机,32MP P系列的真正核心之处始终在于其相机设置...在P30 Pro中,三合一相机设置的多功能性令我们震惊。从那时起,事情发展很快,竞争对手提供了各种形式的多摄像机设置,因此P40必须做出重大回应。...没有Google应用程式 具有EMUI 10.1用户界面的Android 10操作系统 没有Google服务,而是由华为App Gallery 虽然所有三款P40型号都将配备带有华为EMUI 10.1用户界面的...Google Android 10操作系统,但三款产品都不将带有Google Services,这意味着无法访问Google Play商店。

    53620

    如何通过接口设置EasyCVR平台的录像计划?

    其中录像计划功能是指,用户可以根据自己的需求,对监控现场的录像进行灵活的时间排期设置,比如某天/某几天的某时段开启录像,其余时间不录像等,而且录像保存时间天数可自主设置,录像最长可保存30天。...EasyCVR平台可拓展性强,平台提供了丰富的API接口,支持用户自主调用、集成与二次开发,十分便捷。今天就来分享一下如何通过接口设置录像计划。...1)首先,先调用EasyCVR的登录接口: 2)然后,通过接口获取设备列表: 3)找到需要设置录像的设备channelId,使用post请求来调用录像计划的接口。...这里我们以channelId为2的设备为例,在参数中设置录像的时间段(注意:周一到周五必须都要写在json里,如果该天不需要录像可设置为空)。若返回200 OK,则代表录像计划设置成功。

    73330

    Android P Beta 2 及终版 API 强势来袭!

    您可访问 “Android Developers 官方文档” 网站阅读相关文档,学习如何管理裁切区域,避免因兼容性问题对应用造成的不良影响。...您可以在配有双摄像头的设备上实现单摄像头无法做到的创意功能,如无缝变焦、散景和立体视觉。点击查看支持双摄像头Android P Beta 设备!...若无法获取支持设备,您也可以在 Android 模拟器上设置一个 Android 虚拟设备作为测试环境。...正如之前所提到的,我们将从 Android P 开始逐步限制非 SDK 接口的使用,仅允许开发者访问部分特定非 SDK 接口。...如何获取 Android P Beta 2 如果您使用 Pixel 设备,现在就可以加入 Android Beta 计划,会自动获取 Android P Beta 2 下载推送。

    1.3K40

    Android开发笔记(五十六)摄像头拍照

    setParameters : 设置摄像头的拍照参数。 --setPreviewSize : 设置预览界面的尺寸。 --setPictureSize : 设置保存图片的尺寸。...图像数据可以在接口中的onPictureTaken方法中获得,通常我们只关心最后一个的JPG图像数据,所以前面的接口参数可以直接传null。...SurfaceHolder应与SurfaceView配合使用,下面是SurfaceHolder的常用方法: addCallback : 添加回调接口 removeCallback : 移除回调接口...拍照的相关事件 下面是几个拍照用到的回调事件接口: 预览变化事件  监听器类名 : SurfaceHolder.Callback 设置监听器的方法 :  Camera.setPreviewDisplay...: Camera.PictureCallback 设置监听器的方法 : Camera.takePicture 监听器需要重写的方法 : onPictureTaken 变焦事件  监听器类名

    1.8K20

    Android平台GB28181设备接入端PTZ指令对接详解

    PTZCmd实现背景上一篇blog“Android平台GB28181设备接入模块之球机/云台控制探究”谈到,Android平台做国标GB28181设备接入端的时候,PTZ控制要不要处理?...,对前端设备细节感兴趣的时候,可以通过Zoom In、Zoom Out来调整Android GB28181设备接入终端,实现摄像头变焦。...图片技术实现细节GB28181的云台控制命令,对Android平台设备接入端来说,难度不大,只需要把相应的云台控制命令字段回调到上层,上层做个解析,然后进行相应的命令控制即可。...摄像头变焦即可。...总结国标平台侧通过PTZ指令,特别是针对Android的国标接入终端,实现摄像头的实时变焦,实际场景下,非常实用,特别是,如果Android平台国标设备接入端,对接有可以云台控制的RTSP摄像头,做PTZ

    71530

    简单说说Android如何使用摄像头和相册

    很多 APP 应用都有用户头像功能,用户既可以调用摄像头马上拍一张美美的自拍,也可以打开相册选取一张心仪的照片作为头像。 1 调用摄像头 布局文件: <?...super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //为按钮添加【打开摄像头...net.deniro.camera.fileProvider", file); } else { imgUrl = Uri.fromFile(file); } //打开摄像头...,还需要设置访问 SD 卡应用的关联目录权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /...2 从相册中选取照片 直接从相册中选取一张现有的照片比打开摄像头拍一张照片更加常用,因此,一个好的 app,应该将这两种方式都实现。 修改布局文件,加入【打开相册】按钮: <!

    90520

    视频流媒体服务器EasyNVR如何开启多进程工作方式?

    熟悉我们的小伙伴都知道,当我们的RTSP/Onvif流媒体服务器与摄像头可以进行网络连接时,通过RTSP/Onvif流媒体服务器自带的Onvif探测即可实现Onvif摄像头的设备IP探测,成功后返回需要的流地址...,实现摄像头的PTZ云台控制,PTZ控制包含转动、变焦等。...我们流媒体服务器和流媒体播放器都将会趋向于H265编码,之前我们实现了H265编码的播放:EasyRTMP-Android使用H265编码流程,而现在我们也实现了RTSP/Onvif网络摄像头流媒体服务器播放...打开主程序目录下的nginx/conf/easydss.conf文件,修改第一行中的数字(默认为1,即工作进程数为1),最大可设置为CPU核心数,然后保存配置文件,重新启动EasyNVR即可。 ?

    1.1K10

    Android平台GB28181接入端如何对接UVC摄像头

    我们在对接Android平台GB28181接入的时候,有公司提出这样的需求,除了采集执法记录仪摄像头自带的数据外,还想通过执法记录仪采集外接UVC摄像头。...UVC Camera获取到YUV数据后,调用I420的接口编码打包RTMP推出去即可,废话不多说,上接口设计:/** * 传I420图像接口 * * @param data: I420 data...需要注意的是,UVC Camera采集的多大分辨率,就设置多大分辨率下去,如果需要缩放数据,调用native接口的时候,传递scale_width和scale_height下去,让底层缩放就好了,甚至如果摄像头角度不对...,旋转下就好了,是的,接口就这么智能。...其他,GB28181的接口,本文就不再赘述了,之前已经提过多次,UVC Camera和执法记录仪自带的摄像头,就是数据源不同而已,其他信令交互和媒体传输并无差别。

    78700

    EasyCVR实时录像接口教程:如何获取国标接入的摄像头设备录像?

    EasyCVR平台可拓展性强,平台提供了丰富的API接口,支持用户自主调用、集成与二次开发,十分便捷。在此前的文章中,我们也分享了平台相关接口的调用操作,感兴趣的用户可以翻阅以前的博文。...今天来和大家分享一下:EasyCVR如何通过接口获取国标接入的摄像头设备录像的实时录像接口。...1)首先,先调用EasyCVR登录接口: 2)然后找到需要调用的设备以及通道后,调用获取设备录像回看的地址接口后,对视频进行播放,获取流地址后需要记录两个参数:一个是-t(时间戳)和seq(流时间戳)...带入设备的实时录像(/api/v1/playbacktimerecord/start)后,将以上两个参数和通道号传上去: 4)设备录像结束时,调用/api/v1/playbacktimerecord/stop接口...在录像功能方面,EasyCVR不仅支持云端录像、设置录像计划等,还能支持获取设备的录像,并支持录像回放,回放可通过精确的时间轴进行拖动控制,十分快捷。

    72420

    iPhone 7 plus的双摄像头背后,是苹果的AR野心

    这次的新品在外观上除了抛弃耳机接口之外,最大的改变就是双摄像头的加入。有了这个双摄像头,再也不怕挤公交的时候别人看不出来这是最新款的iPhone 7 plus。...iPhone 7 Plus提供的是双1200万像素摄像头,一个镜头负责广角,而另外一个则负责长焦,可以实现2倍光学变焦,最高可达10倍数码变焦,让用户拍出单反级别的照片。从样张的效果来看还是不错的。...双摄像头的主要用途有两大类,第一类就是可以通过算法,来判断被拍摄物体的距离。一旦能够测距,双摄像头可以实现照片的背景虚化、背景特效(适用于抠图)等。第二类就是在光学变焦上的应用。...苹果的长焦和广角摄像头可以在通过算法轻松做到光线变焦、增强照片中的暗光效果,其中最关键的是可以进行3D拍摄和建模。 苹果在2015年的时候花了2000万美元收购了以色列相机技术公司LinX。...苹果又要如何去突围? 库克之前在接受《华盛顿邮报》采访时候表示,苹果未来的工作重点将是人工智能和增强现实技术。

    72820

    Magic Leap 2实测出炉:视场角增大20度,重量减轻20%,透光率低至0.3%让AR特效更逼真

    具体细节究竟如何?我们一起来看 重量更轻,视野更大 从直观外貌来看,Magic Leap 2(以下简称ML2)肉眼可见地瘦了身。 配件上还是老三样:头显+手柄+处理器。...包括:1颗环境光传感器、2个测高仪、2个磁力计、4个IMU(2个集成于头显、1个集成于手柄、1个集成于计算单元)、5个前置摄像头和4个眼球追踪摄像头。 下面,我们来看上手试玩时有哪些新体验。...从图中可以看到,手柄上有两个摄像头传感器。 而第一代产品是采用了磁性追踪,在头显的右下方有一个检测磁场的传感器。 最后再来看内置硬件方面。...在光学变焦上,它只能变焦500度,试玩老哥表示这对高度近视人群不是很友好。 处理器仍旧很大,夹在腰带上时运转的声音很响。...直播报名 | 如何建立AI生态的“Android” 从感知到认知,AI还需要多久才能触及生产核心?从软件到数件,AI生态该如何建立自己“Android”?

    53140

    如何使用 Android Studio 设置 Genymotion 模拟器

    在这里,我们提供了一步一步的教程来下载、设置和使用 Genymotion 和 Android Studio。 请注意,Android Studio 还提供了一个默认的本机模拟器。...下载完成后,请使用下面给出的步骤安装 Android 模拟器。 通过运行下载的软件包开始安装过程。 保留所有设置,继续下一步并单击安装。 您将在两者之间看到 Virtual Box 安装。...使用 Android Studio 设置 Genymotion 模拟器。 现在需要执行更多步骤来使用 Android Studio 添加 Genymotion 模拟器插件。...将 Genymotion 模拟器添加到 Android Studio。 运行 Android Studio 并转到文件菜单。然后,选择设置选项。 在显示的几个选项中,选择 Plugin。...Android Studio 再次启动后,在菜单栏中查找 Genymotion 图标。 单击插件图标。 设置 Genymotion 安装的路径。

    3.3K20

    吹爆谷歌Pixel 3|坚挺单摄撑起一片天,算法真的很重要

    “Hide”设置 悄咪咪地告诉大家,和众多刘海屏手机一样,Pixel 3 XL也支持用户隐藏刘海。进入开发者模式进行设置即可。 ? 价格也“很美丽”, 舔完就心满意足流下了贫穷的眼泪。...原生系统流畅度加持 另外,Pixel 3/XL搭载备受关注的谷歌原生系统Android 9.0——纯净、流畅,只搭载于谷歌Nexus系列和Pixel系列手机。...例如,后置双摄有:大分辨率彩色摄像头+小分辨率彩色摄像头(RGB+RGB)、彩色摄像头+黑白摄像头(Bayer+Mono)、广角镜头+长焦镜头(Wide+Tele)等组合方案。...由此达到“彩色镜头+黑白镜头+长焦镜头”的全新三摄方案,最终为拍摄带来高倍无损变焦、混合变焦的能力。也即能够在低光性能、变焦、高分辨率、景深虚化等方面提供更优质的体验。...简而言之,多摄像头的优势可以概括为:增加玩法、发挥光学变焦的魅力、无损长焦(弥补焦段的不足)等。相较而言,单摄的话就只能依靠数码变焦,放大的话会影响图片画质。 Pixel 3拍照大比拼, 直接上图!

    1K40
    领券