///|
/// 随机点阵水印:按 `DotConfig` 的网格 + PRNG 布局,在全图散布深色点。
///
/// - 图像按 8×8 单元划分网格;每个单元由 `seed` 驱动的确定性 PRNG
///   决定是否落点(`density` 控制落点单元比例)及点在单元内的偏移
///   (叠加 `grid_offset_x / grid_offset_y`)。
/// - 点颜色固定为深色(`0x0000_00FF`),半透明时由 `opacity` 控制;
///   同一配置(尤其同一 `seed`)嵌入结果完全一致,可被 `extract_dots` 复现。
pub fn RgbaImage::embed_dots(self : RgbaImage, cfg : DotConfig) -> RgbaImage {
  let cell = 8
  let alpha = clamp_opacity(cfg.opacity)
  let threshold = (cfg.density * 1000.0).to_int()
  let mut st = seed_to_state(cfg.seed)
  let cols = (self.width + cell - 1) / cell
  let rows = (self.height + cell - 1) / cell
  for cy in 0.. Double {
  let thr = match brightness_threshold {
    Some(v) => v
    None => 128
  }
  let cell = 8
  let mut st = seed_to_state(cfg.seed)
  let cols = (img.width + cell - 1) / cell
  let rows = (img.height + cell - 1) / cell
  let threshold = (cfg.density * 1000.0).to_int()
  let mut hits = 0
  let mut total = 0
  for cy in 0..> 24) & 0xFF
              let g2 = (p >> 16) & 0xFF
              let b2 = (p >> 8) & 0xFF
              if (r2 + g2 + b2) / 3 < thr {
                hits += 1
              }
            }
          }
        }
      }
    }
  }
  if total == 0 {
    0.0
  } else {
    (hits * 1000 / total).to_double() / 1000.0
  }
}