gpt4 book ai didi

c++ - 如何使用c语言在framebuffer中绘制图形..?

转载 作者:IT王子 更新时间:2023-10-28 23:57:41 25 4
gpt4 key购买 nike

我是这个 linux 帧缓冲区的新手,所以有人指导我在帧缓冲区中绘制线图吗?我有在 turbo c 中绘制图形的代码,但现在在 linux 中。所以请帮帮我。

谢谢你,拉胡尔

最佳答案

使用 <a href="http://www.manpagez.com/man/2/open/" rel="noreferrer noopener nofollow">open()</a>/dev 中的右侧文件上(例如 /dev/fb0 ),然后使用 <a href="http://www.manpagez.com/man/2/mmap/" rel="noreferrer noopener nofollow">mmap()</a>将其映射到内存中。如果您不知道如何使用它们,联机帮助页将对这些系统调用有所帮助。

然后有一些结构和常量用于一些<a href="http://www.manpagez.com/man/2/ioctl/" rel="noreferrer noopener nofollow">ioctl()</a><linux/fb.h> .与许多内核头文件一样,您只需浏览文件就可以学到很多东西。

特别有趣的是 ioctl FBIOGET_VSCREENINFOstruct fb_var_screeninfo .注意这有 xres , yres (分辨率)和 bits_per_pixel .然后是FBIOGET_FSCREENINFOstruct fb_fix_screeninfo其中有更多信息,如 typeline_length .

所以 (x, y) 处的像素可能位于 mmap_base_address + x * bits_per_pixel/8 + y * line_length .像素的确切格式将取决于您通过 ioctl 检索的结构;决定如何读/写它们是你的工作。

我已经有一段时间没有使用它了,所以我对更多细节有点模糊..

这里有一个快速而粗略的代码示例,只是为了说明它是如何完成的……我还没有测试过。

#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/mman.h>

#include <linux/fb.h>

#include <unistd.h>
#include <fcntl.h>

#include <stdio.h>

int main()
{
struct fb_var_screeninfo screen_info;
struct fb_fix_screeninfo fixed_info;
char *buffer = NULL;
size_t buflen;
int fd = -1;
int r = 1;

fd = open("/dev/fb0", O_RDWR);
if (fd >= 0)
{
if (!ioctl(fd, FBIOGET_VSCREENINFO, &screen_info) &&
!ioctl(fd, FBIOGET_FSCREENINFO, &fixed_info))
{
buflen = screen_info.yres_virtual * fixed_info.line_length;
buffer = mmap(NULL,
buflen,
PROT_READ|PROT_WRITE,
MAP_SHARED,
fd,
0);
if (buffer != MAP_FAILED)
{
/*
* TODO: something interesting here.
* "buffer" now points to screen pixels.
* Each individual pixel might be at:
* buffer + x * screen_info.bits_per_pixel/8
* + y * fixed_info.line_length
* Then you can write pixels at locations such as that.
*/

r = 0; /* Indicate success */
}
else
{
perror("mmap");
}
}
else
{
perror("ioctl");
}
}
else
{
perror("open");
}

/*
* Clean up
*/
if (buffer && buffer != MAP_FAILED)
munmap(buffer, buflen);
if (fd >= 0)
close(fd);

return r;
}

关于c++ - 如何使用c语言在framebuffer中绘制图形..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1830836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com