Android实现无预览拍照(偷拍)快速实现

实现思路:

把预览的SurfaceView的宽高设置为肉眼看不出的值,例如0.1dp,其他的就是自定义相机的标准步骤了!

 

当然,网上自定义相机的文章多的去了,我是不可能再做老生常谈的事的,在这里我推荐一个很好用的第三方库,也许很多人已经了解过并且用过,没用过的同学可以试试,亲测好用。

废话不多说,先上源码地址:https://github.com/CameraKit/camerakit-android

 

这里简单介绍一下用法:

1、在gradle里添加库的依赖:compile 'com.wonderkiln:camerakit:0.13.1'

2、布局文件代码:

<LinearLayout
            android:id="@+id/ll_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
 
            <Button
                android:id="@+id/btn_test"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="测试"
                android:layout_gravity="center_horizontal"/>

            <com.wonderkiln.camerakit.CameraView
                android:id="@+id/camera"
                android:layout_width="0.1dp"
                android:layout_height="0.1dp"
                android:adjustViewBounds="true"
                camerakit:ckFacing="front" />

        </LinearLayout>

camerakit:ckFacing="front" 表示用前置摄像头,其他属性请参照官方文档。

注意:宽高不能设置为0,否则不能拍照。

3、Java代码

public class MainActivity extends BaseActivity {
    @BindView(R.id.btn_test)
    Button btnTest;
    @BindView(R.id.camera)
    CameraView cameraView;
    @BindView(R.id.ll_content)
    LinearLayout llContent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        initView();
    }    

    @Override
    protected void onResume() {
        super.onResume();
        cameraView.start();
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        cameraView.stop();
        super.onPause();
    }

    private void initView() {
        //设置回调
        cameraView.addCameraKitListener(new CameraKitEventListener() {
            @Override
            public void onEvent(CameraKitEvent cameraKitEvent) {

            }

            @Override
            public void onError(CameraKitError cameraKitError) {

            }

            @Override
            public void onImage(CameraKitImage cameraKitImage) {
                ImageView imageView = new ImageView(MainActivity.this);
                imageView.setImageBitmap(cameraKitImage.getBitmap());
                llContent.addView(imageView);
            }

            @Override
            public void onVideo(CameraKitVideo cameraKitVideo) {

            }
        });
    }

    @OnClick(R.id.btn_test)
    public void onViewClicked() {
       //拍照
       cameraView.captureImage();
    }

}

 

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 要实现android usb鱼眼摄像头的预览拍照功能,首先需要在AndroidManifest.xml文件中添加相应的权限: <uses-feature android:name="android.hardware.usb.host" /> 然后,在MainActivity中定义相机和预览相关的成员变量: private Camera mCamera; private CameraPreview mPreview; 接下来,在onCreate方法中初始化摄像头并设置预览: // 获取预览的布局 FrameLayout preview = findViewById(R.id.camera_preview); // 创建Camera实例并打开摄像头 mCamera = getCameraInstance(); // 创建预览视图并将其添加到布局中 mPreview = new CameraPreview(this, mCamera); preview.addView(mPreview); 这里的getCameraInstance方法用于获取一个摄像头实例,可以参考Android官方文档进行实现。 然后,需要自定义一个CameraPreview类,用于显示摄像头的预览: public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder mHolder; private Camera mCamera; public CameraPreview(Context context, Camera camera) { super(context); mCamera = camera; // 获取SurfaceHolder并设置回调 mHolder = getHolder(); mHolder.addCallback(this); } @Override public void surfaceCreated(SurfaceHolder holder) { try { // 设置摄像头预览显示的Surface mCamera.setPreviewDisplay(holder); // 开始预览 mCamera.startPreview(); } catch (IOException e) { Log.d(TAG, "Error setting camera preview: " + e.getMessage()); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { // 停止预览并释放相机资源 mCamera.stopPreview(); mCamera.release(); mCamera = null; } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // 如果预览正在进行中,先停止预览 if (mHolder.getSurface() == null){ return; } try { mCamera.stopPreview(); } catch (Exception e){ Log.d(TAG, "Error stopping camera preview: " + e.getMessage()); } // 重新设置预览的大小和方向 try { mCamera.setPreviewDisplay(mHolder); mCamera.startPreview(); } catch (Exception e){ Log.d(TAG, "Error starting camera preview: " + e.getMessage()); } } } 最后,添加拍照功能。可以在Activity中的某个按钮的监听事件中调用mCamera.takePicture方法进行拍照: mCamera.takePicture(null, null, mPicture); 其中mPicture是一个PictureCallback对象,用于监听拍照结果: private Camera.PictureCallback mPicture = new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { // 处理拍照结果 // ... } }; 以上是实现android usb鱼眼摄像头预览拍照的基本步骤,具体的实现过程还需要根据具体的摄像头和项目需求来进行调整。 ### 回答2: 要实现Android USB鱼眼摄像头的预览拍照功能,可以按照以下步骤进行: 1. 首先,在`AndroidManifest.xml`文件中添加USB访问权限的声明,以确保能够使用USB设备。 2. 通过`UsbManager`类获取系统中的USB设备列表,并找到对应的鱼眼摄像头设备。 3. 通过`UsbDeviceConnection`类与该USB设备建立连接。 4. 建立连接后,可以使用`UsbEndpoint`类获取到输入和输出的数据通道,用于接收和发送数据。 5. 创建`Camera`对象,并设置参数和回调函数。在回调函数中实现对USB摄像头的数据进行解码和显示。 6. 使用`Camera.startPreview()`方法开始摄像头预览,并将预览数据显示在界面上。 7. 通过`Camera.takePicture()`方法实现拍照功能,将拍摄到的照片保存在指定的路径下。 8. 在使用完毕后,记得释放资源,关闭摄像头等。 需要注意的是,实现USB摄像头预览拍照功能的具体代码比较繁琐,需要对USB协议和相机驱动有一定的了解,而且不同型号的USB摄像头可能存在兼容性问题。因此,最好能够参考相关的开源项目或者官方文档来进行开发,以确保功能的稳定性和可靠性。 ### 回答3: 要实现Android USB鱼眼摄像头的预览拍照功能,可以按照以下步骤进行: 1. 首先,确保设备上已经连接了支持USB摄像头的鱼眼摄像头,并具备相应的权限。 2. 在AndroidManifest.xml文件中添加相应的权限声明,在<manifest>标签下添加以下代码: ```xml <uses-feature android:name="android.hardware.usb.host" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> ``` 3. 创建预览布局,可以在Activity的布局文件中添加一个SurfaceView用于显示预览画面: ```xml <SurfaceView android:id="@+id/surfaceView" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 4. 在Activity中获取SurfaceView,并初始化Camera对象用于预览拍照: ```java private Camera mCamera; private SurfaceView mSurfaceView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSurfaceView = findViewById(R.id.surfaceView); // 初始化Camera对象 mCamera = Camera.open(); mCamera.setPreviewDisplay(mSurfaceView.getHolder()); mCamera.startPreview(); } ``` 5. 添加一个拍照按钮,并在按钮的点击事件监听中实现拍照功能: ```java private Button mCaptureButton; mCaptureButton = findViewById(R.id.captureButton); mCaptureButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 拍照 mCamera.takePicture(null, null, pictureCallback); } }); // 拍照回调函数 private Camera.PictureCallback pictureCallback = new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { // 处理拍照结果 // 将data保存为图片文件或进行其他操作 } }; ``` 这样,就可以通过以上步骤实现Android USB鱼眼摄像头的预览拍照功能。需要注意的是,以上代码仅为简单实现,并未处理摄像头方向、图片保存等细节,具体可根据实际需求进行修改和完善。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值