在Linux控制台下使用libjpeg显示JPEG图像在framebuffer上.doc

在Linux控制台下使用libjpeg显示JPEG图像在framebuffer上.doc

ID:57651324

大小:96.00 KB

页数:17页

时间:2020-08-30

在Linux控制台下使用libjpeg显示JPEG图像在framebuffer上.doc_第1页
在Linux控制台下使用libjpeg显示JPEG图像在framebuffer上.doc_第2页
在Linux控制台下使用libjpeg显示JPEG图像在framebuffer上.doc_第3页
在Linux控制台下使用libjpeg显示JPEG图像在framebuffer上.doc_第4页
在Linux控制台下使用libjpeg显示JPEG图像在framebuffer上.doc_第5页
资源描述:

《在Linux控制台下使用libjpeg显示JPEG图像在framebuffer上.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、在Linux控制台下使用libjpeg显示JPEG图像在framebuffer上1、引言通常情况下,在Linux控制台下是无法查看图像文件的,要想查看图像文件,比如要查看JPEG格式的图像文件,可能必须启动X-Windows,通过GNOME或者KDE之类的桌面管理器提供的图像查看工具查看图片内容。那么,能不能有办法在控制台下面简单地浏览图像内容呢。实际上,这是完全可以的。在Linux下有一个名为zgv的看图软件就是工作在控制台下的。不过,由于它所使用的底层图形库svgalib已经是一个比较“古老”的图形库了,所以现在知道zgv的人并不是很多,用的人

2、就更少了。目前Linux上的底层图形支持通常是由Framebuffer提供的,因此,作者试图在本文中说明如何通过Framebuffer和libjpeg在控制台上显示JPEG图像。需要说明的是,本文中所编写的程序fv并非zgv的替代品,而只是一个出于验证想法的简单程序(fv的含义是FramebufferVision)。本文将先对Framebuffer和libjpeg的编程做一个简略的说明,然后再给出程序fv的具体实现。2、Framebuffer介绍Framebuffer在Linux中是作为设备来实现的,它是对图形硬件的一种抽象[1],代表着显卡中的帧

3、缓冲区(Framebuffer)。通过Framebuffer设备,上层软件可以通过一个良好定义的软件接口访问图形硬件,而不需要关心底层图形硬件是如何工作的,比如,上层软件不用关心应该如何读写显卡寄存器,也不需要知道显卡中的帧缓冲区从什么地址开始,所有这些工作都由Framebuffer去处理,上层软件只需要集中精力在自己要做的事情上就是了。Framebuffer的优点在于它是一种低级的通用设备,而且能够跨平台工作,比如Framebuffer既可以工作在x86平台上,也能工作在PPC平台上,甚至也能工作在m68k和SPARC等平台上,在很多嵌入式设备上

4、Framebuffer也能正常工作。诸如Minigui之类的GUI软件包也倾向于采用Framebuffer作为硬件抽象层(HAL)。从用户的角度来看,Framebuffer设备与其它设备并没有什么不同。Framebuffer设备位于/dev下,通常设备名为fb*,这里*的取值从0到31。对于常见的计算机系统而言,32个Framebuffer设备已经绰绰有余了(至少作者还没有看到过有32个监视器的计算机)。最常用到的Framebuffer设备是/dev/fb0。通常,使用Framebuffer的程序通过环境变量FRAMEBUFFER来取得要使用的Fr

5、amebuffer设备,环境变量FRAMEBUFFER通常被设置为”/dev/fb0”。 从程序员的角度来看,Framebuffer设备其实就是一个文件而已,可以像对待普通文件那样读写Framebuffer设备文件,可以通过mmap()将其映射到内存中,也可以通过ioctl()读取或者设置其参数,等等。最常见的用法是将Framebuffer设备通过mmap()映射到内存中,这样可以大大提高IO效率。要在PC平台上启用Framebuffer,首先必须要内核支持,这通常需要重新编译内核。另外,还需要修改内核启动参数。在作者的系统上,为了启用Frameb

6、uffer,需要将/boot/grub/menu.lst中的下面这一行:kernel/boot/vmlinuz-2.4.20-8roroot=LABEL=/1修改为kernel/boot/vmlinuz-2.4.20-8roroot=LABEL=/1vga=0x0314即增加了vga=0x0314这样一个内核启动参数。这个内核启动参数表示的意思是:Framebuffer设备的大小是800x600,颜色深度是16bits/像素。下面,来了解一下如何编程使用Framebuffer设备。由于对Framebuffer设备的读写应该是不缓冲的,但是标准IO库

7、默认是要进行缓冲的,因此通常不使用标准IO库读写Framebuffer设备,而是直接通过read()、write()或者mmap()等系统调用来完成与Framebuffer有关的IO操作。又由于mmap()能够大大降低IO的开销,因此与Framebuffer设备有关的IO通常都是通过mmap()系统调用来完成的。mmap()的函数原型如下(Linux系统上的定义):#include#ifdef_POSIX_MAPPED_FILESvoid*mmap(void*start,size_tlength,intprot,intfla

8、gs,intfd,off_toffset);intmunmap(void*start,size_tlength);#end

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。