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);
第二种:
就是用Makefile将xx.bmp文件编译成xx.o文件的形式,嵌进进start.bin进去,并且会自动生成数组 _binary_my_bmp_start[],如果要调用,就声明
extern char _binary_my_bmp_start[];便可
Makefile如下:
参考链接:把图片或任意文件直接编译进可执行程序 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分之一大小(同一张图片)
用工具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 boardLcd_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分之一大小(同一张图片)
相关文章推荐
- mini2440 uboot
- 转”使用UBOOT烧写根文件系统和内核的方法
- TQ2440的学习——UBOOT移植(串口控制台的支持)
- UBOOT 2011-3版本分析(初步感受)
- UBOOT 2011-3版本分析(S3C24X0分支分析)
- U-BOOT之一:BootLoader 的概念与功能
- mkimage使用详解 (-a 和 –c参数指定的地址异同的差别)
- 【iMX6QD】 How to Add 24-bit LVDS Support in Android
- uboot版本文件结构的更新改变
- JLINK烧写UBOOT到NAND flash OK6410B_ram256_NAND2G
- U-Boot启动过程
- http://blog.chinaunix.net/uid-20543672-id-3244832.html
- uboot配置分析(jz2440开发板)
- Athroes 9344 刷写 uboot
- uboot设计
- ARM板上android系统开机Logo的修改
- mini6410移植--uboot移植(1)
- win8下uboot启动卡制作
- Linux下SD卡启动制作
- 对uboot配置与编译过程的理解