///|
/// 随机点阵水印:按 `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
}
}