转自
https://mp.weixin.qq.com/s/98y0wFHm8JAZRVhUiIeyMw
欢迎关注公众号。
前言前几篇我们体验了使用ffmpeg进行多媒体开发,本篇使用SDL来进行GUI相关的应用开发。通过加载位图显示的Demo来演示。
构建
下载源码
https://github.com/libsdl-org/SDL/releases/
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
编译完如下:
Build下生成4个文件夹
bin share lib include
生成的库文件位于build/lib
头文件位于build/include/SDL2/
测试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
- #include
- #include
-
- int main(int argc, char* argv[])
- {
- /* 初始化SDL */
- if(SDL_Init(SDL_INIT_VIDEO) != 0)
- {
- printf("SDL_Init Error %s.n", SDL_GetError());
- return 1;
- }
-
- /* 打开窗口 */
- SDL_Window *win = SDL_CreateWindow("Hello World", 100, 100, 640, 480, SDL_WINDOW_SHOWN);
- if(win == NULL)
- {
- printf("SDL_CreateWindow Error %s.n",SDL_GetError());
- SDL_Quit();
- return 1;
- }
-
- /* 创建渲染器 */
- SDL_Renderer *ren = SDL_CreateRenderer(win , -1, SDL_RENDERER_SOFTWARE);
- if(ren == NULL)
- {
- SDL_DestroyWindow(win);
- printf("SDL_CreateRenderer Error %s.n",SDL_GetError());
- SDL_Quit();
- return 1;
- }
-
- /* 加载位图图像 */
- SDL_Surface *bmp = SDL_LoadBMP("hello.bmp");
- if(bmp == NULL)
- {
- SDL_DestroyRenderer(ren);
- SDL_DestroyWindow(win);
- printf("SDL_LoadBMP Error %s.n",SDL_GetError());
- SDL_Quit();
- return 1;
- }
-
- SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp);
- SDL_FreeSurface(bmp);
- if (tex == NULL)
- {
- SDL_DestroyRenderer(ren);
- SDL_DestroyWindow(win);
- printf("SDL_CreateTextureFromSurface Error %s.n",SDL_GetError());
- SDL_Quit();
- return 1;
- }
-
- //A sleepy rendering loop, wait for 3 seconds and render and present the screen each time
- for (int i = 0; i < 3; ++i)
- {
- //First clear the renderer
- SDL_RenderClear(ren);
- //Draw the texture
- SDL_RenderCopy(ren, tex, NULL, NULL);
- //Update the screen
- SDL_RenderPresent(ren);
- //Take a quick break after all that hard work
- SDL_Delay(1000);
- }
-
- SDL_DestroyTexture(tex);
- SDL_DestroyRenderer(ren);
- SDL_DestroyWindow(win);
- SDL_Quit();
-
- return 0;
- }
复制代码
编译
gcc sdltest.c -o sdltest -lSDL2
运行
导入测试文件hello.bmp
如下
运行
./sdltest
可以看到加载显示了位图
总结从以上可以看出,直接在开发板构建SDL,并进行应用编译开发,非常方便。所以使用本开发板可以任意选择各种技术栈进行开发,在进行多媒体终端开发时也有多种选择,非常方便,这得益于开发板运行完整的ubuntu系统和强劲的性能。
0