flutter cameraimage to bitmap

在 Flutter 中,你可以使用 camera image 库来捕获照片并将其转换为 Bitmap 对象。

首先,你需要在 pubspec.yaml 中添加这两个依赖项:

dependencies:
  camera: ^0.9.4+5
  image: ^3.0.2

然后,你需要初始化 CameraController 并捕获图像。可以使用以下代码片段来实现:

import 'package:camera/camera.dart';
import 'package:image/image.dart' as img;
List<CameraDescription> cameras;
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  cameras = await availableCameras();
  runApp(MyApp());
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: CameraScreen(cameras),
class CameraScreen extends StatefulWidget {
  final List<CameraDescription> cameras;
  CameraScreen(this.cameras);
  @override
  _CameraScreenState createState() => _CameraScreenState();
class _CameraScreenState extends State<CameraScreen> {
  CameraController controller;
  Future<void> _initializeControllerFuture;
  @override
  void initState() {
    super.initState();
    controller = CameraController(widget.cameras[0], ResolutionPreset.high);
    _initializeControllerFuture = controller.initialize();
  @override
  void dispose() {
    controller.dispose();
    super.dispose();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Camera Example')),
      body: FutureBuilder(
        future: _initializeControllerFuture,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            return CameraPreview(controller);
          } else {
            return Center(child: CircularProgressIndicator());
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.camera_alt),
        onPressed: () async {
          try {
            await _initializeControllerFuture;
            XFile file = await controller.takePicture();
            img.Image image = img.decodeImage(File(file.path).readAsBytesSync());
            // 转换为 Bitmap 对象
            var bitmap = Bitmap.fromHeadful(image.width, image.height, image.getBytes());
          } catch (e) {
            print(e);

在上面的代码中,CameraController 是用于控制相机的类,CameraPreview 是用于在屏幕上预览相机捕获的内容的小部件。takePicture() 方法用于捕获图像并返回文件路径,decodeImage() 方法用于将文件解码为 Image 对象,最后使用 Bitmap.fromHeadful() 方法将 Image 对象转换为 Bitmap 对象。

请注意,这里使用了 Bitmap.fromHeadful() 方法,这是因为在 Flutter 中,使用 dart:ui 库的 Image 类来表示图像,而不是 Bitmap 类。如果你需要将 Image 对象转换为 Bitmap 对象,可以使用 Bitmap.fromImage() 方法。

希望这些信息对你有所帮助。如果你还有其他问题,请随时提出。

  •