fix(camera): synchroniser le ratio de visée 3/4 avec le capteur natif et corriger le décalage du crop
This commit is contained in:
@@ -13,7 +13,7 @@ import '../../data/models/target_type.dart';
|
||||
import '../crop/crop_screen.dart';
|
||||
import '../session/session_provider.dart';
|
||||
import 'widgets/image_source_button.dart';
|
||||
|
||||
import '../../services/image_crop_service.dart';
|
||||
class CaptureScreen extends StatefulWidget {
|
||||
const CaptureScreen({super.key});
|
||||
|
||||
@@ -23,10 +23,12 @@ class CaptureScreen extends StatefulWidget {
|
||||
|
||||
class _CaptureScreenState extends State<CaptureScreen> with SingleTickerProviderStateMixin {
|
||||
final ImagePicker _picker = ImagePicker();
|
||||
final ImageCropService _cropService = ImageCropService();
|
||||
final TargetType _selectedType = TargetType.concentric;
|
||||
String? _selectedImagePath;
|
||||
bool _isLoading = false;
|
||||
|
||||
|
||||
// AJOUT : Variables de gestion du flux caméra en direct
|
||||
CameraController? _cameraController;
|
||||
List<CameraDescription>? _cameras;
|
||||
@@ -76,11 +78,14 @@ class _CaptureScreenState extends State<CaptureScreen> with SingleTickerProvider
|
||||
if (_cameras != null && _cameras!.isNotEmpty) {
|
||||
_cameraController = CameraController(
|
||||
_cameras![0],
|
||||
ResolutionPreset.high,
|
||||
ResolutionPreset.max, // Force le 4:3 natif au maximum du capteur
|
||||
enableAudio: false,
|
||||
imageFormatGroup: ImageFormatGroup.jpeg,
|
||||
);
|
||||
|
||||
// INITIALISATION UNIQUE ET PROPRE :
|
||||
await _cameraController!.initialize();
|
||||
|
||||
setState(() {
|
||||
_isCameraInitialized = true;
|
||||
_showLiveCamera = true;
|
||||
@@ -215,7 +220,12 @@ class _CaptureScreenState extends State<CaptureScreen> with SingleTickerProvider
|
||||
fit: StackFit.expand,
|
||||
children: [
|
||||
// 1. Le flux vidéo de la caméra
|
||||
CameraPreview(_cameraController!),
|
||||
Center(
|
||||
child: AspectRatio(
|
||||
aspectRatio: 3 / 4, // Aligné sur le format natif du capteur photo
|
||||
child: CameraPreview(_cameraController!),
|
||||
),
|
||||
),
|
||||
|
||||
// 2. L'ASSISTANT DE CADRAGE VIRTUEL (Avec le grand cadre complet et la petite cible)
|
||||
Center(
|
||||
@@ -384,15 +394,15 @@ class _CaptureScreenState extends State<CaptureScreen> with SingleTickerProvider
|
||||
|
||||
setState(() => _isLoading = true);
|
||||
try {
|
||||
// Prise de la photo
|
||||
// 1. On prend la photo brute normale (sans y toucher)
|
||||
final XFile photo = await _cameraController!.takePicture();
|
||||
|
||||
setState(() {
|
||||
_selectedImagePath = photo.path;
|
||||
_showLiveCamera = false; // Quitte la vue caméra
|
||||
_showLiveCamera = false;
|
||||
});
|
||||
|
||||
// Redirection automatique vers l'écran de Crop
|
||||
// 2. On l'envoie directement à l'analyse
|
||||
_analyzeImage();
|
||||
} catch (e) {
|
||||
debugPrint('Erreur lors du clic photo: $e');
|
||||
|
||||
Reference in New Issue
Block a user