` 本帖最后由 weidongshan 于 2017-9-27 15:47 编辑
写这类教程的目的是, 熟悉Linux基本操作和嵌入式开发流程, 希望对你有所帮助.
前面我们讲过系统起来后开机LOGO的制作, 韦老师第3期讲了如何显示jpeg图片, 那么怎么显示bmp图片?这次我们借助libSDL来实现,我们先移植SDL到Ubuntu, 体验它的威力后再移植到 开发板。
一、移植SDL到Ubuntu Ubuntu: Ubuntu9.10 gcc version 3.4.5
1、新建show_bmp_file.c,内容如下: /******************************************************** 文件名称: show_bmp_file.c ****** 程序功能: 显示一张bmp图片到屏幕 ****** *********************************************************/ #include #include "SDL/SDL.h"
int main(int argc,char **argv) { if (argc != 2 ) { printf("Usage: %s xxx.bmp
",argv[0]); return 0; }
SDL_Surface *screen = NULL; SDL_Surface * image= NULL;
//SDL初始化 if(SDL_Init(SDL_INIT_VIDEO)== -1) { printf("Ini tialize SDL error:%s
",SDL_GetError()); return -1; } screen =SDL_SetVideoMode(480, 272, 32, SDL_SWSURFACE|SDL_ANYFORMAT); //设置了LCD最大能显示的分辨率 if(screen == NULL) { printf("Set 480*272*32 error: %s
",SDL_GetError()); return -1; }
SDL_ShowCursor(0);
image =SDL_LoadBMP(argv[1]); if(image == NULL) { printf("Could not load %s : %s
",argv[1],SDL_GetError()); return -1; } if(screen->format->palette &&image->format->palette) { SDL_SetColors(screen,image->format->palette->colors,0,image->format->palette->ncolors); } if(SDL_BlitSurface(image,NULL,screen,NULL) < 0) { printf("SDL_BlitSurface error:%s
",SDL_GetError()); return -1; } SDL_UpdateRect(screen, 0, 0, image->w, image->h);
printf("Pressany key to continue......"); getchar();
SDL_FreeSurface(image); SDL_FreeSurface(screen); SDL_Quit(); return 0; } 2、Ubuntu下编译show_bmp_file.c $ gcc show_bmp_file.c -o pc 有错误:
错误原因:没有安装libsdl库。
解决办法:使用下面的命令安装libsdl。 $ sudo apt-get install libsdl1.2-dev //前提是Ubuntu 能上网 再次编译又有错误:
错误原因:找不到SDL函数实现
解决办法:编译时指定链接的库文件SDL $ gcc show_bmp_file.c-o pc -lSDL
编译成功生成可执行文件:
3、运行pc: $./ pc witcher.bmp // witcher.bmp是480*272分辨率bmp格式图片,事先把它拷贝到Ubuntu相应目录
现象如下
好俊的马啊~
二、移植SDL到JZ2440
Ubuntu: Ubuntu9.10 开发板:JZ2440
任意uboot
kernel:Linux-2.6.22.6 文件系统:fs_qtopia.yaffs2
编译器: ARM-linux-gcc-3.4.2
1.到官网下载 SDL-1.2.15.tar.gz, 并上传到Ubuntu
解压 $ tar zxf SDL-1.2.15.tar.gz $ cd SDL-1.2.15/ $ mkdir tmp
配置 $./configure--prefix=${PWD}/tmp --disable-video-nanox -disable-video-qtopia --disable-video-photon--disable-video-ggi --disable-video-svga --disable-video-aalib--disable-video-dummy --disable-video-directfb --disable-video-dga --disable-arts--disable-esd --disable-alsa --disable-video-x11 --disable-nasm--enable-input-tslib --enable-video-fbcon --host=arm-linux --build=i386 CC=arm-linux-gcc CXX=arm-linux-g++
编译安装 $ make &&make install 这时tmp下多了4个目录,这就是编译SDL所得到的文件
2、同样编译show_bmp_file.c,和之前不同的是,这次是交叉编译 $ cd .. $ cd show_bmp //这是笔者之前创建的目录,用于存放测试程序 $ arm-linux-gccshow_bmp_file.c -o show_bmp_file -I /work/SDL-1.2.15/tmp/include -L/work/SDL-1.2.15/tmp/lib-lSDL
3、拷贝SDL库,应用程序、bmp图片到文件系统 拷贝方法不需要再细讲了吧,笔者习惯用NFS,笔者的内核已经烧到jz2440,只需拷贝应用程序和bmp图片到文件系统下即可
$ cd tmp
$ sudo cp -rfd lib/* /work/busybox-1.21.0/rootfs/lib/ 进入show_bmp目录 $ sudo cp show_bmp_file /work/busybox-1.21.0/rootfs/ $ sudo cp witcher.bmp /work/busybox-1.21.0/rootfs/
5、在jz2440上显示图片: ./show_bmp_filewitcher.bmp
`
|