首页 > 其他分享 >移植SDL到JZ2440显示BMP图片

移植SDL到JZ2440显示BMP图片

时间:2023-07-03 12:31:35浏览次数:55  
标签:show -- JZ2440 bmp BMP disable video SDL


写这类教程的目的是, 熟悉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 <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;
}

2、Ubuntu下编译show_bmp_file.c

$ gcc show_bmp_file.c -o pc

有错误:

 

移植SDL到JZ2440显示BMP图片_嵌入式

错误原因:没有安装libsdl库。
解决办法:使用下面的命令安装libsdl。

$ sudo apt-get install libsdl1.2-dev    //前提是Ubuntu 能上网

再次编译又有错误:

 

移植SDL到JZ2440显示BMP图片_内核_02

错误原因:找不到SDL函数实现
解决办法:编译时指定链接的库文件SDL

$ gcc show_bmp_file.c-o pc -lSDL

 

编译成功生成可执行文件:

 

3、运行pc:

$./ pc witcher.bmp        // witcher.bmp是480*272分辨率bmp格式图片,事先把它拷贝到Ubuntu相应目录

 

现象如下

移植SDL到JZ2440显示BMP图片_ide_03

好俊的马啊~

 

二、移植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所得到的文件

 

移植SDL到JZ2440显示BMP图片_ARM_04

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

移植SDL到JZ2440显示BMP图片_ARM_05

标签:show,--,JZ2440,bmp,BMP,disable,video,SDL
From: https://blog.51cto.com/weidongshan/6610430

相关文章

  • 关于32位bmp的字节值问题
    32位的BMP是BGRA来存值的。由于前137个位是bmp的相关信息,故看其后的,可发现每4位是一组。FF是RGBA中的A,BMP的不是按照正常的RGB来的。 通过放大部分得到RGB值,在HexEditExp中搜索,发现搜索结果为0, 但是把45和0F位置调换一下搜索,发现结果很多。  由此可知,BMP的存值方式......
  • BMZCTF:misc_bbmpp
    http://bmzclub.cn/challenges#misc_bbmpp首先根据提示我们需要爆破压缩包的密码,6位纯数字得到压缩包密码:333520解压得到bbmppp观察整个文件头格式,判断这里应该只是去掉了文件头类型(2字节)和文件大小(4字节)根据当前整个文件大小为80736计算原文件大小为80742十六进制为13B66......
  • WSDL 详解
    [color=red][b]从wsdl生成java代码的命令[/b][/color][b]生成客户端文件1:[/b][color=darkblue]wsdl2java-pcom.neareast.test.cxf.client.WSDL2Java-frontendjaxws21http://localhost:9000/helloWorld?wsdl[/color][b]生成客户端文件2:[/b][color=darkblue]wsdl2java......
  • How to enable Vsync with Software Rendering in SDL [SOLVED]. 如何在SDL2下实现
    HowtoenableVsyncwithSoftwareRenderinginSDL[SOLVED].Hi,IjustfiguredoutthedirtywaytoenablevsyncwithsoftwarerenderingonSDL.Thiswasbotheringmeforaweeknow&I'veseenmanyquestionsonthenetwithoutanswer.ButIf......
  • idea 通过wsdl链接打包
    一导入依赖springboot项目依赖<dependency><groupId>org.apache.axis2</groupId><artifactId>axis2-kernel</artifactId><version>1.7.9</version></dependency>......
  • ffmpeg拉rtmp流并用SDL播放
    开发环境操作系统:win10IDE:vs2019ffmpeg版本:5.1#include<stdio.h>#define__STDC_CONSTANT_MACROS#include"libavformat/avformat.h"#include"libavutil/mathematics.h"#include"libavutil/time.h"#include"libavcodec/avcodec.h&qu......
  • 头部证券公司安全体系搭建实战讲解—开源网安S-SDLC平台助力金融科技安全发展
    数字化时代背景下,新兴技术广泛应用导致软件安全隐患不断扩大。而金融行业由于项目周期长、业务规模大、应用数量多、合规监管严、内外合作多等特性,进一步加重了安全风险。与此同时,《等保2.0》、《网络安全法》等国家政策的发布,自上而下推动信息安全发展,对金融机构的安全防护提出更......
  • 音视频八股文(5)--SDL音视频渲染实战。会使用就行,不需要深究。
    01-SDL子系统SDL将功能分成下列数个子系统(subsystem):◼SDL_INIT_TIMER:定时器◼SDL_INIT_AUDIO:音频◼SDL_INIT_VIDEO:视频◼SDL_INIT_JOYSTICK:摇杆◼SDL_INIT_HAPTIC:触摸屏◼SDL_INIT_GAMECONTROLLER:游戏控制器◼SDL_INIT_EVENTS:事件◼SDL_INIT_EVERYTHING:包含上述所......
  • 音视频八股文(5)--SDL音视频渲染实战。会使用就行,不需要深究。
    01-SDL子系统SDL将功能分成下列数个子系统(subsystem):◼SDL_INIT_TIMER:定时器◼SDL_INIT_AUDIO:音频◼SDL_INIT_VIDEO:视频◼SDL_INIT_JOYSTICK:摇杆◼SDL_INIT_HAPTIC:触摸屏◼SDL_INIT_GAMECONTROLLER:游戏控制器◼SDL_INIT_EVENTS:事件◼SDL_INIT_EVERYTHING:包含上述......
  • sdl2实现简单的登录页面
    #include<SDL.h>#include<SDL_ttf.h>#include<iostream>#include<string>intmain(intargc,char*args[]){  if(SDL_Init(SDL_INIT_VIDEO)<0)  {    std::cerr<<"SDL初始化失败,错误信息:"<<SDL_GetError()&l......