IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> CameraX获取摄像头YUV数据 -> 正文阅读

[移动开发]CameraX获取摄像头YUV数据

  1. 添加依赖
    1. def camerax_version = "1.0.0-beta07"
      implementation "androidx.camera:camera-camera2:$camerax_version"
      implementation "androidx.camera:camera-lifecycle:$camerax_version"
      implementation "androidx.camera:camera-view:1.0.0-alpha14"

  2. 声明权限
    1. <uses-feature android:name="android.hardware.camera.any" />
      <uses-permission android:name="android.permission.CAMERA" />

  3. 预览布局
    1. <?xml version="1.0" encoding="utf-8"?>
      <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">
      
          <androidx.camera.view.PreviewView
              android:id="@+id/previewView"
              android:layout_width="match_parent"
              android:layout_height="match_parent" />
      
      </FrameLayout>

  4. 代码部署
    1. package com.melon.camerademo;
      
      import android.Manifest;
      import android.content.pm.PackageManager;
      import android.os.Bundle;
      import android.util.Log;
      import android.widget.Toast;
      
      import androidx.annotation.NonNull;
      import androidx.annotation.Nullable;
      import androidx.appcompat.app.AppCompatActivity;
      import androidx.camera.core.CameraSelector;
      import androidx.camera.core.ImageAnalysis;
      import androidx.camera.core.ImageCapture;
      import androidx.camera.core.ImageProxy;
      import androidx.camera.core.Preview;
      import androidx.camera.lifecycle.ProcessCameraProvider;
      import androidx.camera.view.PreviewView;
      import androidx.core.app.ActivityCompat;
      import androidx.core.content.ContextCompat;
      
      import com.google.common.util.concurrent.ListenableFuture;
      
      import java.nio.ByteBuffer;
      import java.util.concurrent.ExecutorService;
      import java.util.concurrent.Executors;
      
      public class MyActivity extends AppCompatActivity {
      
          private static final String TAG = "MyActivity";
          private static final int CAMERA_REQUEST_CODE = 100;
          private static final CameraSelector MY_CAMERA = CameraSelector.DEFAULT_BACK_CAMERA;
          private PreviewView mPreviewView;
          private ImageCapture mImageCapture;
          ExecutorService mCameraExecutor = Executors.newSingleThreadExecutor();
      
          @Override
          protected void onCreate(@Nullable Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
      
              initView();
              //启动摄像头
              startCamera();
          }
      
          private void initView() {
              mPreviewView = findViewById(R.id.previewView);
          }
      
          private void startCamera() {
              if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                  Toast.makeText(this, "没有摄像头权限", Toast.LENGTH_LONG).show();
                  Log.e(TAG, "没有摄像头权限");
                  //权限申请
                  ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
                  return;
              }
              Log.d(TAG, "有了摄像头权限");
      
              ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);
              cameraProviderFuture.addListener(new Runnable() {
                  @Override
                  public void run() {
                      try {
                          ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
                          Preview preview = new Preview.Builder().build();
                          preview.setSurfaceProvider(mPreviewView.createSurfaceProvider());
                          mImageCapture = new ImageCapture.Builder().build();
      
                          //图像分析
                          ImageAnalysis imageAnalyzer = new ImageAnalysis.Builder().build();
                          imageAnalyzer.setAnalyzer(mCameraExecutor, new ImageAnalysis.Analyzer() {
                              @Override
                              public void analyze(@NonNull ImageProxy image) {
                                  // 分析
                                  ByteBuffer byteBuffer = image.getPlanes()[0].getBuffer();
                                  int pixelStride = image.getPlanes()[0].getPixelStride();
                                  int rowStride = image.getPlanes()[0].getRowStride();
                                  ByteBuffer byteBuffer1 = image.getPlanes()[1].getBuffer();
                                  int pixelStride1 = image.getPlanes()[1].getPixelStride();
                                  int rowStride1 = image.getPlanes()[1].getRowStride();
                                  ByteBuffer byteBuffer2 = image.getPlanes()[2].getBuffer();
                                  int pixelStride2 = image.getPlanes()[2].getPixelStride();
                                  int rowStride2 = image.getPlanes()[2].getRowStride();
                                  int rotationDegrees = image.getImageInfo().getRotationDegrees();
                                  int format = image.getFormat(); //CameraX默认出图格式:YUV_420_888  YYYY UV VU,数据分别在image.getPlanes()[0],image.getPlanes()[1],image.getPlanes()[2]中
                                  int width = image.getWidth();
                                  int height = image.getHeight();
                                  Log.d(TAG, "capacity: " + byteBuffer.capacity()
                                          + ", pixelStride: " + pixelStride
                                          + ", rowStride: " + rowStride
                                          + ", capacity1: " + byteBuffer1.capacity()
                                          + ", pixelStride1: " + pixelStride1
                                          + ", rowStride1: " + rowStride1
                                          + ", capacity2: " + byteBuffer2.capacity()
                                          + ", pixelStride2: " + pixelStride2
                                          + ", rowStride2: " + rowStride2
                                          + ", rotationDegrees: " + rotationDegrees
                                          + ", format: " + format
                                          + ", width: " + width
                                          + ", height: " + height
                                  );
      
                                  image.close();
                              }
                          });
      
                          cameraProvider.unbindAll();
                          cameraProvider.bindToLifecycle(MyActivity.this, MY_CAMERA, preview, mImageCapture, imageAnalyzer);
                      } catch (Exception e) {
                          Log.e(TAG, "error: " + e.getMessage());
                      }
                  }
              }, ContextCompat.getMainExecutor(this));
          }
      
      }
      

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-15 15:59:21  更:2021-11-15 15:59:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:51:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码