您的位置:首页 > 编程语言 > Go语言

UBOOT状态下的显示图片的N种方法

2016-06-19 10:31 861 查看
第一种:

用工具Image2Lcd



生成文件logo.h(

注意:

1.不要勾选包含图像头数据,这样可以去掉bmp的文件头,编程的时候就可以不用加去掉文件头的步骤啦(机智如我^-^)

2.输出灰度也要可以选择时候合适自己的

)。

生成的logo.h文件里面,会有自动生成的数组const unsigned char gImage_logo[1152000] (800 * 480 * 3 ==  1152000),

然后要打印的图片的文件里面包含logo.h

调用绘画函数就可以了

整个程序start.bin从0x4000 0000开始运行的

Lcd_DrawBmp(gImage_logo);

void Lcd_DrawBmp(const unsigned char gImage_bmp[])
{
int x,y;
unsigned char *p = (unsigned char *)gImage_bmp;
int blue, green, red;
int color;

for(y = 479; y >=0; y--) // Rollover images
{
for (x = 0; x < 800; x++)
{

blue  = *p++;
green = *p++;
red   = *p++;

color = red << 16 | green << 8 | blue << 0;
fimd_DrawPoint(x, y, color);
}
}
}
unsigned int *fbuf = (unsigned int *)0x42000000;
void fimd_DrawPoint(unsigned int x,unsigned int y,unsigned long color)
{
*(fbuf + (800*y+x)) = color;
}

第二种:

就是用Makefile将xx.bmp文件编译成xx.o文件的形式,嵌进进start.bin进去,并且会自动生成数组 _binary_my_bmp_start[],如果要调用,就声明

extern char _binary_my_bmp_start[];便可

Makefile如下:

CC = arm-linux-gcc
LD = arm-linux-ld
OBJCOPY = arm-linux-objcopy # ln -s arm-none-linux-gnueabi-objcopy arm-linux-objcopy

INCLUDEDIR := $(shell pwd)/include/
CPPFLAGS := -nostdinc -nostdlib -I$(INCLUDEDIR)
CFLAGS := -fno-builtin -Wall -O2

export CC LD OBJCOPY CPPFLAGS CFLAGS

OBJS := cpu/start.o cpu/board.o  lib/uart.o lib/libc.a  board/keyled_intr.o cpu/adc.o cpu/fimd_rgb.o my.o
all:start.bin clean

start.bin:$(OBJS)
$(LD) -Ttext=0x40000000 $(OBJS) -o start.elf
$(OBJCOPY) -O binary -S start.elf $@

%.o:%.S
$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
%.o:%.c
$(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
my.o:my.bmp
$(OBJCOPY) -I binary -O elf32-littlearm -B arm my.bmp my.o

clean:
cp ./start.bin /mnt/hgfs/Linux_Window_share/arm210
rm -rf ./start.elf
make clean -C cpu
make clean -C board
Lcd_DrawBmp(_binary_my_bmp_start + 54); //54个字节是跳过文件头

参考链接:把图片或任意文件直接编译进可执行程序 http://blog.chinaunix.net/uid-8599612-id-6788.html
第三种:

写程序(x86下)来替代Image2Lcd,将图片xx.bmp写入文件.H然后程序在调用,类似第一种

第四种:

将图片xx.bmp先下载到开板的某个地址如0x4200 0000(命令tftp 0x4200 0000 xx.bmp),在调用图片的时候可以直接引用0x4200 0000这个地址,当然

这时候的bmp的文件头没有去掉,即引用的时候要从0x4200 0000 + 0x36 (0x36 == 54)开始,因为bmp的文件头为54个字节

第五种:

是写程序(x86下)来将start.bin 和 xx.bmp和成一个新的bin文件即new_start.bin

当然这个程序的思路就是开劈一块内存(malloc),给能够容得下start.bin和bmp,比如给start.bin为16k(必须大与start.bin且是确定的),因为跟第四种方法一样也是要知道bmp的文件的位置,才可以调用xx.bmp文件

第六种:

硬件解码,因为我用的这款芯片是支持jpeg解码的,所以可以通过配置电路(即寄存器)来实现硬件解码,这种是最高效的,而且是最节省空间的,因为jpeg图片只是BMP图片的30分之一大小(同一张图片)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uboot 开机logo