一、下载psplash
地址:https://download.csdn.net/download/chidaoqi1607/12373339
二、去掉进度条
打开psplash.c,注释掉进度条相关代码,如下:
/*
//进度条上面的框框
psplash_fb_draw_rect (fb,
0,
fb->height - (fb->height/6) - h,
fb->width,
h,
PSPLASH_BACKGROUND_COLOR);
*/
#if 0
/* Draw progress bar border */
psplash_fb_draw_image (fb,
(fb->width - BAR_IMG_WIDTH)/2,
fb->height - (fb->height/6),
BAR_IMG_WIDTH,
BAR_IMG_HEIGHT,
BAR_IMG_BYTES_PER_PIXEL,
BAR_IMG_RLE_PIXEL_DATA);
#endif
// psplash_draw_progress (fb, 0);
三、实现显示单个图片
1.将想要显示的png图片(图片像素要与屏幕像素一致)放入源码下,然后输入以下命令
./make-image-header.sh myir_linux.png POKY
此时会生成myir_linux-img.h文件,里面就是png对应的数据
2.再次打开psplash.c,添加myir_linux.png的数据,包含头文件
#include "myir_linux-img.h"
在main函数中添加
psplash_fb_draw_image (fb,
(fb->width - MYIR_IMG_WIDTH)/2,
//((fb->height * 5) / 6 - MYIR_IMG_HEIGHT)/2,
(fb->height - MYIR_IMG_HEIGHT)/2,
MYIR_IMG_WIDTH,
MYIR_IMG_HEIGHT,
MYIR_IMG_BYTES_PER_PIXEL,
MYIR_IMG_RLE_PIXEL_DATA);
这里的宏定义都是对应myir_linux-img.h中的,例如此时myir_linux-img.h中的宏定义:
#define MYIR_IMG_ROWSTRIDE (1280)
#define MYIR_IMG_WIDTH (320)
#define MYIR_IMG_HEIGHT (480)
#define MYIR_IMG_BYTES_PER_PIXEL (4) /* 3:RGB, 4:RGBA */
#define MYIR_IMG_RLE_PIXEL_DATA ((uint8*) \
"\354\5\16\32\377\203\6\20\35\377\202\6\21!\377\202\10\23#\377\215\11\25" \
"*\377\205\10\23#\377\1\6\20\35\377\377\5\16\32\377\377\5\16\32\377\252" \
"\5\16\32\377\1\6\20\35\377\202\6\21!\377\204\10\23#\377\211\11\25*\377" \
"\206\10\23#\377\2\11\21\35\377\6\20\35\377\377\5\16\32\377\377\5\16\32" \
"\377\253\5\16\32\377\202\6\20\35\377\1\10\23#\377\203\6\21!\377\215\10" \
"\23#\377\1\11\21\35\377\202\6\20\35\377\377\5\16\32\377\377\5\16\32\377" \
"\255\5\16\32\377\202\6\20\35\377\204\6\21!\377\212\10\23#\377\1\6\21" \
.......................................................
........................................................
3.编译psplash
指定交叉编译工具链路径:source /opt/fsl-imx-x11/4.9.11-1.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
然后:make
此时会生成psplash,psplash-write可执行文件,将其放入arm文件系统的/usr/bin/下
因为psplash.sh脚本在根文件系统/etc/init.d中,此项已经存在,psplash.sh的链接在根文件系统/etc/rcS.d/目录下,用于开机启动,所以重启后就能看到效果了。
四、实现动画
动画:多个图片连续刷就行。
1.将gif分成多张图片
2.将每张图片执行类似./make-image-header.sh myir_linux.png POKY的操作,生成多个.h文件
3.在psplash.c中包含多个.h文件,并修改多个.h中 MYIR_IMG_RLE_PIXEL_DATA的名字便于区分
4.在main函数中写入多张图片并加延时,如下:
psplash_fb_draw_image (fb,
(fb->width - MYIR_IMG_WIDTH)/2,
//((fb->height * 5) / 6 - MYIR_IMG_HEIGHT)/2,
(fb->height - MYIR_IMG_HEIGHT)/2,
MYIR_IMG_WIDTH,
MYIR_IMG_HEIGHT,
MYIR_IMG_BYTES_PER_PIXEL,
MYIR_IMG_RLE_PIXEL_DATA1);
usleep(50000);
psplash_fb_draw_image (fb,
(fb->width - MYIR_IMG_WIDTH)/2,
//((fb->height * 5) / 6 - MYIR_IMG_HEIGHT)/2,
(fb->height - MYIR_IMG_HEIGHT)/2,
MYIR_IMG_WIDTH,
MYIR_IMG_HEIGHT,
MYIR_IMG_BYTES_PER_PIXEL,
MYIR_IMG_RLE_PIXEL_DATA2);
usleep(50000);
psplash_fb_draw_image (fb,
(fb->width - MYIR_IMG_WIDTH)/2,
//((fb->height * 5) / 6 - MYIR_IMG_HEIGHT)/2,
(fb->height - MYIR_IMG_HEIGHT)/2,
MYIR_IMG_WIDTH,
MYIR_IMG_HEIGHT,
MYIR_IMG_BYTES_PER_PIXEL,
MYIR_IMG_RLE_PIXEL_DATA3);
usleep(50000);
...............................................
...............................................
5.编译psplash如上,重启即可