C++ MFont::show 函数图像压缩问题解决方法
在使用 C++ 的 MFont 类中的 show 函数时,可能会遇到图像出现压缩现象的问题。这是因为在循环中,xr 和 yr 变量没有在内层循环结束后重新初始化为 0,导致在下一行绘制时出错。
以下代码片段展示了原始代码以及修复后的代码:
原始代码:
void MFont::show(string buf, int x, int y, u32 fcolor)
{
m_buf = buf;
fontPrint(m_f, m_bm, 0, 0, (char *)m_buf.data(), fcolor, 0);
int xr = 0;
int yr = 0;
for (int j = y; j < (y + m_MFheight);j++)
{
for (int i = x; i < (x + m_MFwidth); i++)
{
Lcd::getInstance()->lcdAddr()[j * 800 + i] = m_bm->map[yr * m_MFwidth + xr];
xr++;
}
yr++;
}
}
修复后的代码:
void MFont::show(string buf, int x, int y, u32 fcolor)
{
m_buf = buf;
fontPrint(m_f, m_bm, 0, 0, (char *)m_buf.data(), fcolor, 0);
int xr = 0;
int yr = 0;
for (int j = y; j < (y + m_MFheight); j++)
{
xr = 0; // 初始化xr为0
for (int i = x; i < (x + m_MFwidth); i++)
{
Lcd::getInstance()->lcdAddr()[j * 800 + i] = m_bm->map[yr * m_MFwidth + xr];
xr++;
}
yr++;
}
}
通过在内层循环前将 xr 初始化为 0,可以确保每个像素都正确绘制,从而解决图像压缩的问题。
原文地址: https://www.cveoy.top/t/topic/o9Qv 著作权归作者所有。请勿转载和采集!