在 Linux 控制台下使用 libjpeg 显示 JPEG 图像在 framebuer 上
、引言
通常情况下,在 控制台下是无法查看图像文件的,要想查看图像文件,比如要查看
格式的图像文件,可能必须启动 ,通过 或者 之类的桌面
管理器提供的图像查看工具查看图片内容。那么,能不能有办法在控制台下面简单地浏览
图像内容呢。实际上,这是完全可以的。在 下有一个名为 的看图软件就是工作
在控制台下的。不过,由于它所使用的底层图形库 已经是一个比较“古老”的图形库
了,所以现在知道 的人并不是很多,用的人就更少了。
目前 上的底层图形支持通常是由 !! 提供的,因此,作者试图在本文中说
明如何通过 !! 和 "# 在控制台上显示 图像。需要说明的是,本文中所
编写的程序 ! 并非 的替代品,而只是一个出于验证想法的简单程序(! 的含义是
!! $%)。本文将先对 !! 和 "# 的编程做一个简略的说明,然
后再给出程序 ! 的具体实现。
&、 !! 介绍
!! 在 中是作为设备来实现的,它是对图形硬件的一种抽象'(,代表着显卡
中的帧缓冲区( !! )。通过 !! 设备,上层软件可以通过一个良好定义
的软件接口访问图形硬件,而不需要关心底层图形硬件是如何工作的,比如,上层软件不
用关心应该如何读写显卡寄存器,也不需要知道显卡中的帧缓冲区从什么地址开始,所有
这些工作都由 !! 去处理,上层软件只需要集中精力在自己要做的事情上就是了。
!! 的优点在于它是一种低级的通用设备,而且能够跨平台工作,比如
!! 既可以工作在 )* 平台上,也能工作在 + 平台上,甚至也能工作在 *),
和 -./+ 等平台上,在很多嵌入式设备上 !! 也能正常工作。诸如 之类
的 01 软件包也倾向于采用 !! 作为硬件抽象层(2.)。
从用户的角度来看, !! 设备与其它设备并没有什么不同。 !! 设备位于
3 下,通常设备名为 !4,这里4的取值从 5 到 6。对于常见的计算机系统而言,6& 个
!! 设备已经绰绰有余了(至少作者还没有看到过有 6& 个监视器的计算机)。最
常用到的 !! 设备是3 3!5。通常,使用 !! 的程序通过环境变量
/.70/ 来取得要使用的 !! 设备,环境变量 /.70/ 通常被设
置为”3 3!58。
从程序员的角度来看, !! 设备其实就是一个文件而已,可以像对待普通文件那
样读写 !! 设备文件,可以通过 #9:将其映射到内存中,也可以通过 ;<9:读
取或者设置其参数,等等。最常见的用法是将 !! 设备通过 #9:映射到内存中,
这样可以大大提高 1 效率。
要在 + 平台上启用 !! ,首先必须要内核支持,这通常需要重新编译内核。另外,
还需要修改内核启动参数。在作者的系统上,为了启用 !! ,需要将3<33
=< 中的下面这一行: