当前位置: 技术问答>linux和unix
字符界面下显示图片
来源: 互联网 发布时间:2017-02-22
本文导语: 有一个问题一直在我的心中徘徊,那就是Linux的字符界面下有没有显示图片的能力,比如.JPG或者GIF文件。图形界面太笨重和占用资源了。 | 那个是boot splash吧。 另外Linux curses满足需求吗?终端图形库...
有一个问题一直在我的心中徘徊,那就是Linux的字符界面下有没有显示图片的能力,比如.JPG或者GIF文件。图形界面太笨重和占用资源了。
|
|
可通过往framebuffer(帧缓冲)里写数据实现图形显示,因为这个缓冲是储存显示屏显示的图形数据的。
|
动画?不都是一张一张的图片切换出来的吗?
你可以用这个程序试试:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
static __u16 rr[256],gg[256],bb[256];
static struct fb_var_screeninfo fb_vinfo;
static struct fb_fix_screeninfo fb_fix;
static struct fb_cmap oldcmap = {0,256,rr,gg,bb} ;
int main()
{
clock_t start,end;
int color = 255, fd, m,n,w, h, width, height;
unsigned char *p,*dest, *fb_mem, *rgba;
/* 打开图形输出设备 */
if ((fd = open("/dev/fb0", O_RDWR)) == -1)
return -1;
/* 获取相关信息 */
ioctl(fd, FBIOGET_VSCREENINFO, &fb_vinfo);
ioctl(fd, FBIOGET_FSCREENINFO, &fb_fix);
if (fb_vinfo.bits_per_pixel==8)
ioctl(fd, FBIOGETCMAP, &oldcmap);
/* 保存屏幕的宽度和高度(单位为:像素) */
width = fb_vinfo.xres;
height = fb_vinfo.yres;
/* 映射帧缓存至内存空间 */
fb_mem = mmap(NULL,fb_fix.smem_len, PROT_READ|PROT_WRITE,MAP_SHARED, fd, 0);/* 映射显存 */
/* 分配内存空间,每个像素点占用用4个sizeof(unsigned char)的内存空间,共有width*height个像素点 */
rgba = (unsigned char*)calloc(width*height*4, sizeof(unsigned char));
color = 255;
start=clock();
while(color--)
{
dest = fb_mem; /* 循环一次,指针重新指向帧缓冲的首地址 */
/* 先生成图形数据,这只是简单的生成,复杂的图形可以自己写算法生成 */
for (h = 0; h