fix(analysis): correctif réel du zoom post prise de photo

This commit is contained in:
qguillaume
2026-06-05 07:42:07 +02:00
parent 9e0427f750
commit ccc6eb609a
2 changed files with 18 additions and 9 deletions

View File

@@ -361,7 +361,7 @@ class _CropScreenState extends State<CropScreen> {
final minDisplayDim = math.min(displayWidth, displayHeight);
// 2. Calcul du scale initial basé sur la dimension de l'image (et non du viewport)
_scale = widget.initialScale ?? (_cropSize / minDisplayDim);
_scale = widget.initialScale ?? 1.0;
if (_scale < 1.0 && widget.initialScale == null) _scale = 1.0;
// 3. Réinitialisation propre de l'offset au centre de la zone d'affichage
@@ -389,17 +389,26 @@ class _CropScreenState extends State<CropScreen> {
Future<void> _onCropConfirm() async {
setState(() => _isLoading = true);
try {
// CORRECTIF ZOOM : On sauvegarde et réinitialise le zoom avant de calculer
// la zone de découpe pour ne pas transmettre le zoom aux écrans suivants
final savedScale = _scale;
final savedOffset = _offset;
_scale = 1.0;
_offset = Offset.zero;
final cropRect = _calculateCropRect();
// On restaure pour l'affichage (au cas où on revient en arrière)
_scale = savedScale;
_offset = savedOffset;
// AJOUT DE LA DECOUPE ET DU REDRESSEMENT GÉOMÉTRIQUE PHYSIQUE
final croppedImagePath = await _cropService.cropToSquare(
widget.imagePath,
cropRect,
rotationDegrees: _rotation, // On transmet la rotation à la jauge haute précision
rotationDegrees: _rotation,
);
// L'image sortant du service étant désormais un carré physique parfait (1:1),
// le centre de la cible se trouve précisément au milieu (0.5, 0.5)
const targetCenterX = 0.5;
const targetCenterY = 0.5;
@@ -409,13 +418,13 @@ class _CropScreenState extends State<CropScreen> {
context,
MaterialPageRoute(
builder: (_) => AnalysisScreen(
imagePath: croppedImagePath, // On injecte le fichier carré nettoyé
imagePath: croppedImagePath,
targetType: widget.targetType,
initialCenterX: targetCenterX,
initialCenterY: targetCenterY,
cropScale: 1.0, // Réinitialisé car la texture est déjà recadrée à la bonne échelle
cropOffset: Offset.zero, // Réinitialisé car le fichier est déjà parfaitement centré
cropRotation: 0.0, // Réinitialisé car les pixels ont déjà subi la rotation matricielle
cropScale: 1.0,
cropOffset: Offset.zero,
cropRotation: 0.0,
),
),
);