在 GOP 图形 (UEFI) 中使用 set_pixel 函数打印文本时出现问题
Trouble printing text with a set_pixel function in GOP graphics (UEFI)
实际上我有一个 .efi 应用程序(打算成为一个非常早期的内核),它可以设置图形和其他东西,我用这个图形来制作一个 "set_pixel" 函数,几天前我有打印文字的需求。
经过几天的研究,我发现我唯一的解决方案是编写我需要使用这个 "set_pixel" 函数和我所做的一些其他推导("draw_line" 等)的所有字符
可以想象,这是一项非常繁琐且缓慢的任务,除了写出所有字符 "by hand" 之外还有另一种解决方案吗?一种导入字体并使用它的方法?提前致谢!
这是我自己的解决方案。
我以头文件的形式创建了一个简单的字体(暂时不完整...)。
然后我使用这个函数将一个字符绘制到 GOP 缓冲区中:
void drawChar(uint32_t *buffer, uint32_t x, uint32_t y, uint32_t color, wchar_t charcode) {
extern wchar_t font_system_8x16[KAOS_FONTS_SIZE];
wchar_t p = charcode * 128 - 128; // Size of a font's character
for (int l = 0; l < 16; l++) {
for (int c = 0; c < 8; c++) {
if (font_system_8x16[p] == 1) {
drawPoint(buffer, x + c, y + l, color);
}
p++;
}
}
}
随时获取灵感。
编辑:要更快地生成头文件,请查看此 C header file with bitmapped fonts
实际上我有一个 .efi 应用程序(打算成为一个非常早期的内核),它可以设置图形和其他东西,我用这个图形来制作一个 "set_pixel" 函数,几天前我有打印文字的需求。
经过几天的研究,我发现我唯一的解决方案是编写我需要使用这个 "set_pixel" 函数和我所做的一些其他推导("draw_line" 等)的所有字符
可以想象,这是一项非常繁琐且缓慢的任务,除了写出所有字符 "by hand" 之外还有另一种解决方案吗?一种导入字体并使用它的方法?提前致谢!
这是我自己的解决方案。
我以头文件的形式创建了一个简单的字体(暂时不完整...)。 然后我使用这个函数将一个字符绘制到 GOP 缓冲区中:
void drawChar(uint32_t *buffer, uint32_t x, uint32_t y, uint32_t color, wchar_t charcode) {
extern wchar_t font_system_8x16[KAOS_FONTS_SIZE];
wchar_t p = charcode * 128 - 128; // Size of a font's character
for (int l = 0; l < 16; l++) {
for (int c = 0; c < 8; c++) {
if (font_system_8x16[p] == 1) {
drawPoint(buffer, x + c, y + l, color);
}
p++;
}
}
}
随时获取灵感。
编辑:要更快地生成头文件,请查看此 C header file with bitmapped fonts