agent_image_diff/output/
summary.rs1use crate::region::DiffResult;
2use anyhow::Result;
3use std::io::Write;
4
5pub fn write_summary(result: &DiffResult, writer: &mut impl Write) -> Result<()> {
6 if result.is_match {
7 writeln!(writer, "Images are identical.")?;
8 return Ok(());
9 }
10
11 writeln!(writer, "Images differ.")?;
12 writeln!(
13 writer,
14 " Dimensions: {}x{}",
15 result.dimensions.width, result.dimensions.height
16 )?;
17 writeln!(
18 writer,
19 " Changed pixels: {} ({:.2}%)",
20 result.stats.changed_pixels, result.stats.diff_percentage
21 )?;
22 if result.stats.antialiased_pixels > 0 {
23 writeln!(
24 writer,
25 " Anti-aliased pixels (excluded): {}",
26 result.stats.antialiased_pixels
27 )?;
28 }
29 writeln!(writer, " Regions: {}", result.stats.region_count)?;
30
31 if let Some(mismatch) = &result.dimension_mismatch {
32 writeln!(
33 writer,
34 " Dimension mismatch: baseline={}x{}, candidate={}x{}",
35 mismatch.baseline.width,
36 mismatch.baseline.height,
37 mismatch.candidate.width,
38 mismatch.candidate.height
39 )?;
40 }
41
42 writeln!(writer)?;
43 for region in &result.regions {
44 writeln!(
45 writer,
46 " Region #{} [{}]: {}x{} at ({},{}) — {} pixels, avg delta {:.3}, max delta {:.3}",
47 region.id,
48 region.label,
49 region.bounding_box.width,
50 region.bounding_box.height,
51 region.bounding_box.x,
52 region.bounding_box.y,
53 region.pixel_count,
54 region.avg_delta,
55 region.max_delta
56 )?;
57 }
58
59 Ok(())
60}