fix(analysis): correctif réel du zoom post prise de photo
This commit is contained in:
@@ -287,7 +287,7 @@ class _AnalysisScreenContentState extends State<_AnalysisScreenContent> {
|
|||||||
radius,
|
radius,
|
||||||
ringCount: ringCount,
|
ringCount: ringCount,
|
||||||
ringRadii: ringRadii,
|
ringRadii: ringRadii,
|
||||||
zoomScale: widget.cropScale ?? 1.0,
|
zoomScale: 1.0,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -361,7 +361,7 @@ class _CropScreenState extends State<CropScreen> {
|
|||||||
final minDisplayDim = math.min(displayWidth, displayHeight);
|
final minDisplayDim = math.min(displayWidth, displayHeight);
|
||||||
|
|
||||||
// 2. Calcul du scale initial basé sur la dimension de l'image (et non du viewport)
|
// 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;
|
if (_scale < 1.0 && widget.initialScale == null) _scale = 1.0;
|
||||||
|
|
||||||
// 3. Réinitialisation propre de l'offset au centre de la zone d'affichage
|
// 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 {
|
Future<void> _onCropConfirm() async {
|
||||||
setState(() => _isLoading = true);
|
setState(() => _isLoading = true);
|
||||||
try {
|
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();
|
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
|
// AJOUT DE LA DECOUPE ET DU REDRESSEMENT GÉOMÉTRIQUE PHYSIQUE
|
||||||
final croppedImagePath = await _cropService.cropToSquare(
|
final croppedImagePath = await _cropService.cropToSquare(
|
||||||
widget.imagePath,
|
widget.imagePath,
|
||||||
cropRect,
|
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 targetCenterX = 0.5;
|
||||||
const targetCenterY = 0.5;
|
const targetCenterY = 0.5;
|
||||||
|
|
||||||
@@ -409,13 +418,13 @@ class _CropScreenState extends State<CropScreen> {
|
|||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
MaterialPageRoute(
|
||||||
builder: (_) => AnalysisScreen(
|
builder: (_) => AnalysisScreen(
|
||||||
imagePath: croppedImagePath, // On injecte le fichier carré nettoyé
|
imagePath: croppedImagePath,
|
||||||
targetType: widget.targetType,
|
targetType: widget.targetType,
|
||||||
initialCenterX: targetCenterX,
|
initialCenterX: targetCenterX,
|
||||||
initialCenterY: targetCenterY,
|
initialCenterY: targetCenterY,
|
||||||
cropScale: 1.0, // Réinitialisé car la texture est déjà recadrée à la bonne échelle
|
cropScale: 1.0,
|
||||||
cropOffset: Offset.zero, // Réinitialisé car le fichier est déjà parfaitement centré
|
cropOffset: Offset.zero,
|
||||||
cropRotation: 0.0, // Réinitialisé car les pixels ont déjà subi la rotation matricielle
|
cropRotation: 0.0,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user