首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于嵌入式系统的视频图像捕获研究与实现02

基于嵌入式系统的视频图像捕获研究与实现02

4 应用framebuffer进行图像的显示
      为了将程序中图像数据显示在设备的液晶屏幕上,需要读出现实设备的地址并将其映射到系统内存空间上,然后再将图像数据写到映射后的地址空间上。
          首先需要计算出屏幕内存空间的字节数,计算公式为: 
          屏幕内存空间的字节数=像素的个数╳每个像素占用的字节
          其中像素的个数是行和列的乘积,而行和列的数值以及每个像素占用的字节数值可以通过函数ioctl()取得或设置。下述代码为打开framebuffer,读取屏幕的可设置信息,并计算屏幕内存空间的字节数的过程。
    struct fb_var_screeninfo vinfo;
    int FraBuf= open(/dev/0, O_RDWR);
    ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo);
    long int screensize = vinfo.xres * vinfo.yres* vinfo.bits_per_pixel;
    取得屏幕的大小后,将打开的设备FraBuf得到的内存空间映射到系统中,如下所示,
    char *fbp fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED,fbfd, 0);
          然后将前文得到的数据赋值即可。上面的函数的具体意义,读者可以参看相关技术文档,限于篇幅本文没有阐述。这个过程和前文所述的捕获过程是相反的过程。
          5 简单字符的屏幕显示技术
          在数字图像处理过程中,为了将处理后结果或数字显示出来,可以在屏幕上开个区域进行显示。如若字体较多需要字库,如果仅仅是简单的数字可以采用像素描绘的方法。本文作者就是采用后者输出了数字。如数字“1”的描绘程序如下:
    x=160;
    for ( y = 210; y < 230; y++ ) {
    location = (x+vinfo.xoffset) * (vinfo.bits_per_pixel/8) +y+vinfo.yoffset) * finfo.line_length;
         *(fbp + location) = 10;
         *(fbp + location + 1) =10;
         *(fbp + location + 2) =10;
          }
          其中x、y为屏幕的位置,而fbp就是前文打开的设备。
          6 结束语
          本文采用的设备是基于SAMSUNG公司的arm9芯片S3C2410,由于篇幅的限制本文没有具体阐述整个系统,集中阐述了视频图像数据的捕获和显示,在这一过程中存在许多细节问题,限于篇幅没有阐述。
返回列表