Android Studio开发之路(十二)image、byte[]、mat、Bitmap几种格式互转合集

一、知识点

  1. Camerax中的
    imageCapture用例默认的image格式是JPEG,
    而ImageAnalysis用例默认的image格式是YUV_420_888.

二、ImageAnalysis用例中ImageProxy转mat

YUV转Mat

三、imageCapture中image专byte[]

如下边代码,

//拍照,保存到内存
private void takephoto(){

  imageCapture.takePicture(ContextCompat.getMainExecutor(this),new ImageCapture.OnImageCapturedCallback() {
            @Override
            public void onCaptureSuccess(ImageProxy image) {
                ByteBuffer buffer = image.getPlanes()[0].getBuffer();
                byte[] data = new byte[buffer.capacity()];
                buffer.get(data);
                //判断是否正确的转为了jpeg格式的字节数组
                if (isJpeg(data)) {
                    //继续操作
                }
                image.close();
            }
            
  });
}
//判断获取的图像是否是jpeg格式
    private boolean isJpeg(byte[] data) {
        if (data == null || data.length < 2) {
            return false;
        }
        // JPEG 文件的开头两个字节应该是 0xFF, 0xD8
        return data[0] == (byte)0xFF && data[1] == (byte)0xD8;
    }

四、byte[]转mat, 与mat转byte[]

public void byteMat(byte[] data){
     int width=image.getWidth();
     int height=image.getHeight();
     //byte[]转mat
     Mat mat = Imgcodecs.imdecode(new MatOfByte(data), Imgcodecs.IMREAD_COLOR);

     // 使用Imgcodecs.imencode将Mat对象编码为JPEG格式byte[]
     MatOfByte matbuffer = new MatOfByte();                    
     boolean result = Imgcodecs.imencode("a.jpg", mat, matbuffer);
     // 检查是否成功编码
      if (result) {
          // 获取编码后的字节数组
          byte[] jpegBytes = matbuffer.toArray();
          //byte[]转mat
          Mat mat2 = Imgcodecs.imdecode(new MatOfByte(jpegBytes), Imgcodecs.IMREAD_COLOR);
        }
}

五、byte[]转bitmap, mat转bitmap

public void bitMap(byte[] data, Mat new_img){
    //byte转bitmap,这个有一点问题就是转之后的bitmap方向不正
     Bitmap bit=BitmapFactory.decodeByteArray(data, 0, data.length);
    
    //mat转bitmap
    Bitmap mbitmap = Bitmap.createBitmap(new_img.width(), new_img.height(), Bitmap.Config.ARGB_8888);
    Utils.matToBitmap(new_img,mbitmap);
}

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-15 15:36:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-15 15:36:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-15 15:36:06       87 阅读
  4. Python语言-面向对象

    2024-05-15 15:36:06       96 阅读

热门阅读

  1. 常见网络攻击及解决方案

    2024-05-15 15:36:06       34 阅读
  2. 2024年广东省助理工程师职称评审指南!

    2024-05-15 15:36:06       39 阅读
  3. 【数据库】银行转账并发问题

    2024-05-15 15:36:06       35 阅读
  4. 学习MySQL(一):了解数据库

    2024-05-15 15:36:06       34 阅读
  5. Flink中基于Chandy-Lamport算法的分布式快照实现详解

    2024-05-15 15:36:06       37 阅读
  6. Qt中的TCP通信:一个详细指南

    2024-05-15 15:36:06       35 阅读
  7. LeetCode1523.在区间范围内统计奇数数目

    2024-05-15 15:36:06       36 阅读
  8. 桥接模式

    2024-05-15 15:36:06       31 阅读
  9. 5.14号模拟前端面试10问

    2024-05-15 15:36:06       31 阅读