1. 程式人生 > >移植SDL到JZ2440顯示BMP圖片

移植SDL到JZ2440顯示BMP圖片

寫這類教程的目的是, 熟悉Linux基本操作和嵌入式開發流程, 希望對你有所幫助.

前面我們講過系統起來後開機LOGO的製作, 韋老師第3期講了如何顯示jpeg圖片, 那麼怎麼顯示bmp圖片?這次我們藉助libSDL來實現,我們先移植SDLUbuntu, 體驗它的威力後再移植到開發板。

一、移植SDLUbuntu

Ubuntu: Ubuntu9.10

gcc version 3.4.5

1、新建show_bmp_file.c,內容如下:

/********************************************************

檔名稱: show_bmp_file.c        ******

程式功能: 顯示一張bmp圖片到螢幕           ******

*********************************************************/

#include <stdio.h>

#include "SDL/SDL.h"

int main(int argc,char **argv)

{

  if (argc != 2 )

  {

    printf("Usage: %s xxx.bmp \n",argv[0]);

     return 0;

  }

    SDL_Surface *screen  = NULL;

    SDL_Surface * image= NULL;

    //SDL初始化

   if(SDL_Init(SDL_INIT_VIDEO)== -1)

    {

       printf("Initialize SDL error:%s \n",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\n",SDL_GetError());

        return -1;

}

    SDL_ShowCursor(0);

    image =SDL_LoadBMP(argv[1]);

    if(image == NULL)

    {

       printf("Could not load %s : %s\n",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 \n",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;

}

2Ubuntu下編譯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相應目錄

現象如下

好俊的馬啊~

二、移植SDLJZ2440

Ubuntu: Ubuntu9.10

開發板:JZ2440任意uboot
kernel
Linux-2.6.22.6

檔案系統:fs_qtopia.yaffs2編譯器:arm-linux-gcc-3.4.2

解壓

$ 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