c – 如何使用c语言在framebuffer中绘制图形?

c – 如何使用c语言在framebuffer中绘制图形?,第1张

概述我是这个 linux framebuffer的新手,所以任何人都可以指导我在framebuffer中画线形图.我有代码在turbo c中绘制图形,但现在在linux中.所以请帮我 谢谢, 拉胡尔 在/ dev(例如/ dev / fb0)中的正确文件上使用 open(),然后使用 mmap()将其映射到内存中.如果您不知道如何使用这些系统调用,联机帮助页将帮助您. 然后,< linux / fb. 我是这个 linux framebuffer的新手,所以任何人都可以指导我在framebuffer中画线形图.我有代码在turbo c中绘制图形,但现在在linux中.所以请帮我

谢谢,
拉胡尔

解决方法 在/ dev(例如/ dev / fb0)中的正确文件上使用 open(),然后使用 mmap()将其映射到内存中.如果您不知道如何使用这些系统调用,联机帮助页将帮助您.

然后,< linux / fb.h>中的某些ioctl()有一些结构和常量.像许多内核头文件一样,您可以轻松学习浏览文件.

特别有趣的是ioctl FBIOGET_VSCREENINFO与struct fb_var_screeninfo.注意这里有xres,yres(resolution)和bits_per_pixel.那么有FBIOGET_FSCREENINFO和struct fb_fix_screeninfo,其中有更多的信息,如类型和line_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中绘制图形?全部内容,希望文章能够帮你解决c – 如何使用c语言在framebuffer中绘制图形?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1250202.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存