GEC6818 开发板 C 语言显示中文文本 - framebuffer 驱动示例
"#include "stdio.h"\n#include "stdlib.h"\n#include "fcntl.h"\n#include "linux/fb.h"\n#include "sys/mmap.h"\n\n#define FB_DEV "/dev/fb0"\n#define SCREEN_WIDTH 800\n#define SCREEN_HEIGHT 480\n#define BITS_PER_PIXEL 32\n\nvoid draw_pixel(unsigned char *fbp, int x, int y, int r, int g, int b, int a) {\n unsigned int pixel = (unsigned int)(fbp + (x * BITS_PER_PIXEL / 8) + (y * SCREEN_WIDTH * BITS_PER_PIXEL / 8));\n unsigned int color = (a << 24) | (r << 16) | (g << 8) | b;\n *pixel = color;\n}\n\nint main() {\n int fbfd = open(FB_DEV, O_RDWR);\n if (fbfd == -1) {\n perror("Error opening framebuffer device");\n return 1;\n }\n\n struct fb_var_screeninfo vinfo;\n if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo) == -1) {\n perror("Error reading variable screen info");\n close(fbfd);\n return 1;\n }\n\n if (vinfo.bits_per_pixel != BITS_PER_PIXEL) {\n fprintf(stderr, "Error: Unsupported framebuffer pixel format\n");\n close(fbfd);\n return 1;\n }\n\n size_t screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;\n unsigned char fbp = (unsigned char)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0);\n if (fbp == MAP_FAILED) {\n perror("Error mapping framebuffer");\n close(fbfd);\n return 1;\n }\n\n // 清空屏幕\n memset(fbp, 0, screensize);\n\n // 在屏幕上显示中文文本\n int x = 100;\n int y = 100;\n int r = 255;\n int g = 255;\n int b = 255;\n int a = 255;\n char text[] = "你好,世界!";\n int i;\n for (i = 0; i < strlen(text); i++) {\n draw_pixel(fbp, x + i * 16, y, r, g, b, a);\n draw_pixel(fbp, x + i * 16, y + 1, r, g, b, a);\n draw_pixel(fbp, x + i * 16, y + 2, r, g, b, a);\n draw_pixel(fbp, x + i * 16, y + 3, r, g, b, a);\n draw_pixel(fbp, x + i * 16, y + 4, r, g, b, a);\n draw_pixel(fbp, x + i * 16, y + 5, r, g, b, a);\n draw_pixel(fbp, x + i * 16, y + 6, r, g, b, a);\n draw_pixel(fbp, x + i * 16, y + 7, r, g, b, a);\n }\n\n munmap(fbp, screensize);\n close(fbfd);\n\n return 0;\n}\n"\n这段代码打开了/dev/fb0文件,读取了屏幕的信息,并使用mmap函数将屏幕内存映射到用户空间。然后,通过draw_pixel函数在屏幕上绘制像素点来显示中文文本。在示例代码中,使用了"你好,世界!"这个中文文本,可以根据需要修改成其他中文文本。
原文地址: https://www.cveoy.top/t/topic/qeOn 著作权归作者所有。请勿转载和采集!