import 'package:flutter/services.dart'; /// Camera2 API を使用してフル解像度の画像をキャプチャするサービス. class RawCaptureService { static const _channel = MethodChannel('com.example.mini_tias/raw_capture'); /// フロントカメラからフル解像度の PNG バイト列をキャプチャする(ネイティブ変換). Future captureFullResolutionPng() async { final result = await _channel .invokeMethod('captureFullResolutionPng') .timeout( const Duration(seconds: 30), onTimeout: () => throw Exception('カメラキャプチャがタイムアウトしました'), ); if (result == null) { throw Exception('PNG キャプチャに失敗しました'); } return result; } /// YUV_420_888 を JPEG に変換する(Android ネイティブの高速変換). Future convertYuvToJpeg({ required int width, required int height, required Uint8List yPlane, required Uint8List uPlane, required Uint8List vPlane, required int yRowStride, required int uvRowStride, required int uvPixelStride, int rotation = 0, bool mirror = false, int quality = 85, }) async { final result = await _channel.invokeMethod('convertYuvToJpeg', { 'width': width, 'height': height, 'yPlane': yPlane, 'uPlane': uPlane, 'vPlane': vPlane, 'yRowStride': yRowStride, 'uvRowStride': uvRowStride, 'uvPixelStride': uvPixelStride, 'rotation': rotation, 'mirror': mirror, 'quality': quality, }); if (result == null) { throw Exception('YUV to JPEG 変換に失敗しました'); } return result; } /// フロントカメラの Camera2 API 能力を診断情報として取得する. /// /// 戻り値はカメラの各種パラメータを含む Map.取得できない場合は null を返す. Future?> getCameraDiagnostics() async { final result = await _channel.invokeMethod>( 'getCameraDiagnostics', ); if (result == null) return null; return result.cast(); } /// MediaStore にファイルを登録し,PC から MTP で見えるようにする. Future scanFile(String path) async { await _channel.invokeMethod('scanFile', {'path': path}); } /// Android のシャッター音を再生する. Future playShutterSound() async { await _channel.invokeMethod('playShutterSound'); } /// Android の通知音を保存完了音として再生する. Future playSaveCompleteSound() async { await _channel.invokeMethod('playSaveCompleteSound'); } }