Flutter YUV图像转换插件yuv_converter的使用

Flutter YUV图像转换插件yuv_converter的使用

特性

YUV格式图片转RGBA形式
支持:

  • yuv422 uyvy
  • yuv422 yuyv
  • yuv422 yvyu
  • yuv422 vyuy
  • yuv420 NV21
  • yuv420 NV12

开始使用

首先,在您的 pubspec.yaml 文件中添加依赖项:

dependencies:
  yuv_converter: ^版本号

然后运行 flutter pub get

使用方法

以下是一个将NV21格式的YUV数据转换为RGBA数据的示例:

import 'package:flutter/material.dart';
import 'package:yuv_converter/yuv_converter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('YUV to RGBA Example'),
        ),
        body: Center(
          child: YuvToRgbaExample(),
        ),
      ),
    );
  }
}

class YuvToRgbaExample extends StatefulWidget {
  [@override](/user/override)
  _YuvToRgbaExampleState createState() => _YuvToRgbaExampleState();
}

class _YuvToRgbaExampleState extends State<YuvToRgbaExample> {
  Uint8List? rgbaData;

  [@override](/user/override)
  void initState() {
    super.initState();
    // 假设你有一个长度为width * height * 3/2的NV21格式的YUV数据
    Uint8List yuvData = Uint8List(512 * 512 * 3 ~/ 2); 
    int width = 512;
    int height = 512;

    // 转换YUV到RGBA
    rgbaData = YuvConverter.yuv420nv21ToRgba8888(yuvData, width, height);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Container(
      color: Colors.grey,
      child: rgbaData != null
          ? Image.memory(rgbaData!)
          : Center(child: CircularProgressIndicator()),
    );
  }
}

更多关于Flutter YUV图像转换插件yuv_converter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter YUV图像转换插件yuv_converter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


yuv_converter 是一个用于在 Flutter 中将 YUV 图像格式转换为 RGB 格式的插件。YUV 是一种常见的图像格式,尤其在视频编码和摄像头捕获中广泛使用。将 YUV 转换为 RGB 是为了在屏幕上显示或进行图像处理时使用。

安装 yuv_converter 插件

首先,你需要在 pubspec.yaml 文件中添加 yuv_converter 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  yuv_converter: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来安装依赖。

使用 yuv_converter 插件

yuv_converter 插件提供了 YuvConverter 类,可以将 YUV 数据转换为 RGB 数据。以下是一个简单的使用示例:

import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:yuv_converter/yuv_converter.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: YuvConversionDemo(),
    );
  }
}

class YuvConversionDemo extends StatefulWidget {
  [@override](/user/override)
  _YuvConversionDemoState createState() => _YuvConversionDemoState();
}

class _YuvConversionDemoState extends State<YuvConversionDemo> {
  Uint8List? _rgbImage;

  [@override](/user/override)
  void initState() {
    super.initState();
    _convertYuvToRgb();
  }

  Future<void> _convertYuvToRgb() async {
    // 示例 YUV 数据 (假设是 NV21 格式)
    Uint8List yuvData = Uint8List.fromList([
      // Y 分量
      100, 101, 102, 103, 104, 105, 106, 107,
      // UV 分量
      200, 201, 202, 203, 204, 205, 206, 207,
    ]);

    // 图像的宽高
    int width = 2;
    int height = 2;

    // 将 YUV 转换为 RGB
    Uint8List rgbData = YuvConverter.yuv420ToRgb(
      yuvData,
      width,
      height,
      YuvFormat.NV21,
    );

    setState(() {
      _rgbImage = rgbData;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('YUV to RGB Conversion'),
      ),
      body: Center(
        child: _rgbImage != null
            ? Image.memory(
                _rgbImage!,
                width: 200,
                height: 200,
                fit: BoxFit.cover,
              )
            : CircularProgressIndicator(),
      ),
    );
  }
}
回到顶部