MorningMC 2021-09-18 23:17 采纳率: 100%
浏览 25
已结题

UI全乱了!谁能帮帮忙?

最近做UI,我采用了VESA0x118画面模式(1024*768分辨率,8:8:8 24位真彩),写了以下程序:

void putcolor(char* buf, int xsize, int color, int x, int y)
{
    buf[(y * xsize + x) * 3 + 0] = (char)(color >> 16);
    buf[(y * xsize + x) * 3 + 1] = (char)(color >> 8);
    buf[(y * xsize + x) * 3 + 2] = (char)(color >> 0);
    return;
}
void boxfill(char* buf, int xsize, int color, int xfrom, int yfrom, int xto, int yto)
{
    int x, y;
    for (x = xfrom; x <= xto; x++)
    {
        for (y = yfrom; y <= yto; y++)
        {
            putcolor(buf, xsize, color, x, y);
        }
    }
    return;
}
void init_screen(char* buf, int xsize, int ysize)
{
    static char startbtn[20][22] = {
        "......................",
        "......................",
        "......................",
        ".........****.........",
        ".......********.......",
        "......***....***......",
        ".....**........**.***.",
        ".....**........**...**",
        "....**..........*..**.",
        "....**...........***..",
        ".**.**........****....",
        "**..**....****........",
        ".**...****.....**.....",
        "..****.........**.....",
        "......***....***......",
        ".......********.......",
        ".........****.........",
        "......................",
        "......................",
        "......................",
    };
    static char searchbtn[18][20] = {
        "....................",
        "....................",
        "...........****.....",
        "..........*....*....",
        ".........*......*...",
        ".........*......*...",
        ".........*......*...",
        ".........*......*...",
        "..........*....*....",
        "........**.****.....",
        ".......**...........",
        "......**............",
        ".....**.............",
        "....**..............",
        "...**...............",
        "....................",
        "....................",
        "....................",
    };
    int x, y;
    boxfill8(buf, xsize, 0x0000ff, 0, 0, xsize - 1, ysize - 1);
    boxfill8(buf, xsize, 0x000084, 0, ysize - 30, xsize - 1, ysize - 1);
    //boxfill8(buf, xsize, 0x000000, 0, y - 30, x - 1, y - 30);
    boxfill8(buf, xsize, 0x848484, 40, ysize - 23, 40, ysize - 7);
    boxfill8(buf, xsize, 0x000000, 50, ysize - 25, 300, ysize - 5);
    boxfill8(buf, xsize, 0x0000ff, 51, ysize - 24, 299, ysize - 6);
    for (x = 0; x < 20; x++)
    {
        for (y = 0; y < 22; y++)
        {
            if (startbtn[x][y] == '*')
            {
                putcolor(buf, xsize, 0xffffff, 9 + y, ysize - 25 + x);
            }
            else
            {
                putcolor(buf, xsize, 0x000084, 9 + y, ysize - 25 + x);
            }
        }
    }
    for (x = 0; x < 18; x++)
    {
        for (y = 0; y < 20; y++)
        {
            if (searchbtn[x][y] == '*')
            {
                putcolor(buf, xsize, 0x000000, 55 + y, ysize - 24 + x);
            }
            else
            {
                putcolor(buf, xsize, 0xffffff, 55 + y, ysize - 24 + x);
            }
        }
    }
    return;
}

putcolor用于画点,boxfill用于画方块,init_screen初始化屏幕,最终调用init_screen。
结果全乱了

img

我为此苦恼了一个月,有哪位兄长可以帮帮忙?
环境:QEMU虚拟机

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 9月26日
    • 创建了问题 9月18日

    悬赏问题

    • ¥15 springmvc redis
    • ¥20 来个看看这段代码怎么转换成二维码
    • ¥15 路线配置,规则,位置详解, 操作业类型在创建创建自定义路线中和各种业务详解
    • ¥15 SQL insert into错误
    • ¥50 zk+kafka三节点,zk异常重新选主后导致的高可用问题
    • ¥15 对回溯算法进行剪枝操作
    • ¥15 安全模式下,用户没有C盘所有权限
    • ¥15 grbl怎么清除一条命令?
    • ¥15 grbl移动过程中,发送“!"停止,进入Hold状态,怎么解除?
    • ¥15 wpf中自己实现sorting,每一次都是升序排列