在 Debian 上使用 CxImage(或基于 CxImage 的程序)出现乱码,通常不是 CxImage 本身“解码错误”,而是字符编码 / 字体 / 文本绘制方式的问题。下面按常见原因给你梳理一下。
CxImage 在绘制文字(如 DrawString)时,需要系统或程序提供TrueType 字体。
Debian 默认 不带中文字体,所以:
✅ 解决:
sudo apt update
sudo apt install fonts-wqy-zenhei
# 或
sudo apt install fonts-noto-cjk
然后在代码里指定字体文件,例如:
image.DrawString("中文", 10, 10, "wqy-zenhei.ttc");
CxImage 的 DrawString 不直接支持宽字符自动转换。
如果你用的是:
image.DrawString("中文");
而源码是 GBK / ANSI,在 Debian(UTF-8)下必然乱码。
✅ 解决方式:
std::wstring + DrawStringW示例:
std::wstring ws = L"中文";
image.DrawStringW(ws.c_str(), 10, 10, font);
Linux 下字体名 ≠ Windows 字体名。
❌ 错误:
"Arial"
"宋体"
✅ 正确(示例):
"DejaVu Sans"
"WenQuanYi Zen Hei"
查看可用字体:
fc-list
CxImage 的字体渲染很弱:
如果用于 UI / 报表 / 水印,建议:
putText(仅简单)QPainter你可以逐条确认:
DrawStringWCxImage img;
img.Create(400, 200, 24);
img.DrawStringW(
L"中文测试",
10, 10,
"wqy-zenhei.ttc"
);
img.Save("out.png", CXIMAGE_FORMAT_PNG);
Debian 下 CxImage 乱码,99% 是“没中文字体 + 编码不对”
如果你愿意,可以把:
发出来,我可以直接帮你定位到具体哪一步。