飞凌嵌入式
直播中

jf_1137202360

8年用户 1358经验值
擅长:嵌入式技术
私信 关注
[技术]

【飞凌RK3588开发板试用】基于SDL进行GUI程序开发

转自
https://mp.weixin.qq.com/s/98y0wFHm8JAZRVhUiIeyMw
欢迎关注公众号。

前言
前几篇我们体验了使用ffmpeg进行多媒体开发,本篇使用SDL来进行GUI相关的应用开发。通过加载位图显示的Demo来演示。
构建
下载源码
https://github.com/libsdl-org/SDL/releases/
图片3.png
https://github.com/libsdl-org/SDL/releases/download/release-2.26.4/SDL2-2.26.4.tar.gz
解压
tar -xvf SDL2-2.26.4.tar.gz
进入工作目录
cd SDL2-2.26.4/
创建目录
mkdir build
配置
./configure --prefix=$PWD/build
构建安装
make && make install
编译完如下:
图片4.png
Build下生成4个文件夹
bin share lib include
生成的库文件位于build/lib
头文件位于build/include/SDL2/
图片5.png
测试
vi /etc/profile
添加
export C_INCLUDE_PATH=/root/SDL2-2.26.4/build/include/SDL2:$C_INCLUDE_PATH
export LIBRARY_PATH=/root/SDL2-2.26.4/build/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=/root/SDL2-2.26.4/build/lib:$LD_LIBRARY_PATH   
source /etc/profile
创建源文件内容如下
sdltest.c
  1. #include

  2. #include



  3. int main(int argc, char* argv[])

  4. {

  5.     /* 初始化SDL */

  6.     if(SDL_Init(SDL_INIT_VIDEO) != 0)

  7.     {

  8.         printf("SDL_Init Error %s.n", SDL_GetError());

  9.         return 1;

  10.     }



  11.     /* 打开窗口 */

  12.     SDL_Window *win = SDL_CreateWindow("Hello World", 100, 100, 640, 480, SDL_WINDOW_SHOWN);

  13.     if(win == NULL)

  14.     {

  15.         printf("SDL_CreateWindow Error %s.n",SDL_GetError());

  16.         SDL_Quit();

  17.         return 1;

  18.     }



  19.     /* 创建渲染器 */

  20.     SDL_Renderer *ren = SDL_CreateRenderer(win , -1, SDL_RENDERER_SOFTWARE);

  21.     if(ren == NULL)

  22.     {

  23.         SDL_DestroyWindow(win);

  24.         printf("SDL_CreateRenderer Error %s.n",SDL_GetError());

  25.         SDL_Quit();

  26.         return 1;

  27.     }



  28.     /* 加载位图图像 */

  29.     SDL_Surface *bmp = SDL_LoadBMP("hello.bmp");

  30.     if(bmp == NULL)

  31.     {

  32.         SDL_DestroyRenderer(ren);

  33.         SDL_DestroyWindow(win);

  34.         printf("SDL_LoadBMP Error %s.n",SDL_GetError());

  35.         SDL_Quit();

  36.         return 1;

  37.     }



  38.     SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp);

  39.     SDL_FreeSurface(bmp);

  40.     if (tex == NULL)

  41.     {

  42.         SDL_DestroyRenderer(ren);

  43.         SDL_DestroyWindow(win);

  44.         printf("SDL_CreateTextureFromSurface Error %s.n",SDL_GetError());

  45.         SDL_Quit();

  46.         return 1;

  47.     }



  48.     //A sleepy rendering loop, wait for 3 seconds and render and present the screen each time

  49.     for (int i = 0; i < 3; ++i)

  50.     {

  51.         //First clear the renderer

  52.         SDL_RenderClear(ren);

  53.         //Draw the texture

  54.         SDL_RenderCopy(ren, tex, NULL, NULL);

  55.         //Update the screen

  56.         SDL_RenderPresent(ren);

  57.         //Take a quick break after all that hard work

  58.         SDL_Delay(1000);

  59.     }



  60.     SDL_DestroyTexture(tex);

  61.     SDL_DestroyRenderer(ren);

  62.     SDL_DestroyWindow(win);

  63.     SDL_Quit();



  64.     return 0;

  65. }

编译
gcc sdltest.c -o sdltest -lSDL2
运行
导入测试文件hello.bmp
如下
图片6.png
运行
./sdltest
可以看到加载显示了位图
图片7.png
总结
从以上可以看出,直接在开发板构建SDL,并进行应用编译开发,非常方便。所以使用本开发板可以任意选择各种技术栈进行开发,在进行多媒体终端开发时也有多种选择,非常方便,这得益于开发板运行完整的ubuntu系统和强劲的性能。

更多回帖

发帖
×
20
完善资料,
赚取积分