analyze static method

ScanQualityReport analyze(
  1. Uint8List imageBytes, {
  2. required int width,
  3. required int height,
})

Performs comprehensive quality analysis on grayscale image bytes.

imageBytes — Raw grayscale pixel data (1 byte per pixel). width and height — Image dimensions in pixels.

Implementation

static ScanQualityReport analyze(
  Uint8List imageBytes, {
  required int width,
  required int height,
}) {
  final stopwatch = Stopwatch()..start();

  final blur = analyzeBlur(imageBytes, width: width, height: height);
  final light = analyzeLight(imageBytes);
  final skew = analyzeSkew(imageBytes, width: width, height: height);
  final contrast = analyzeContrast(imageBytes);

  // Calculate overall score as weighted average
  final blurWeight = 0.35;
  final lightWeight = 0.25;
  final skewWeight = 0.15;
  final contrastWeight = 0.25;

  final blurScore = 1.0 - blur.score;
  final lightScore = _lightConditionScore(light.condition);
  final skewScore = skew.isAligned ? 1.0 : math.max(0.0, 1.0 - (skew.angleDegrees.abs() / 45.0));
  final contrastScore = contrast.isAdequate ? 1.0 : contrast.contrastRatio.clamp(0.0, 1.0);

  final overallScore = (blurScore * blurWeight +
          lightScore * lightWeight +
          skewScore * skewWeight +
          contrastScore * contrastWeight)
      .clamp(0.0, 1.0);

  final grade = _scoreToGrade(overallScore);
  final recommendations = _generateRecommendations(blur, light, skew, contrast);

  stopwatch.stop();

  return ScanQualityReport(
    grade: grade,
    overallScore: overallScore,
    blur: blur,
    light: light,
    skew: skew,
    contrast: contrast,
    recommendations: recommendations,
    analysisTime: stopwatch.elapsed,
  );
}