在使用 C++ 的 MFont 类中的 show 函数时,可能会遇到图像出现压缩现象的问题。这是因为在循环中,xryr 变量没有在内层循环结束后重新初始化为 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,可以确保每个像素都正确绘制,从而解决图像压缩的问题。

C++ MFont::show 函数图像压缩问题解决方法

原文地址: https://www.cveoy.top/t/topic/o9Qv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录