fix: ASCII渲染静区bug — saturating_sub导致左/上边距读取模块边界而非空白

x < margin 时 mx 被 saturating_sub 截断为 0,导致读取 modules[0][*] 而不是渲染空白静区。
改为显式边界检查 x >= margin && x < margin+size,四边静区均为空白。
This commit is contained in:
2026-06-27 14:56:44 +08:00
parent ce9c8b1b6e
commit 7c248d8ff9
+4 -5
View File
@@ -12,12 +12,11 @@ pub fn render_ascii(qr: &QrCode, invert: bool) -> String {
let mut result = String::new(); let mut result = String::new();
for y in 0..total { for y in 0..total {
for x in 0..total { for x in 0..total {
let mx = x.saturating_sub(margin); let in_qr = x >= margin && x < margin + size && y >= margin && y < margin + size;
let my = y.saturating_sub(margin); let is_dark = if in_qr {
let is_dark = if mx < size && my < size { qr.modules()[y - margin][x - margin]
qr.modules()[my][mx]
} else { } else {
false false // 静区始终为亮色
}; };
result.push_str(if is_dark { dark_char } else { light_char }); result.push_str(if is_dark { dark_char } else { light_char });
} }