0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SDL编译安装图片显示

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2022-09-29 15:54 次阅读

SDL编译安装图片显示

1.SDL简介

 SDL(Simple DirectMediaLayer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、MacOS X等)的应用软件。现SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。

  在编译SDL库前,先安装以下工具:

sudo apt-get install autoconf
 sudo apt-get install automake
sudo apt-get install libtool
sudo apt-get install make
sudo apt-get install xorg-dev 

2. SDL库编译与安装

下载地址:SDL2.0
 (1)将下载的SDL2-2.0.14.tar.gz压缩包拷贝至虚拟机解压。

[wbyq@wbyq src_pack]$ tar xvf /mnt/hgfs/ubuntu/software_pack/SDL2-2.0.14.tar.gz

 (2)配置编译安装路径

[wbyq@wbyq SDL2-2.0.14]$ ./autogen.sh 
[wbyq@wbyq SDL2-2.0.14]$ ./configure --prefix=$PWD/_install
[wbyq@wbyq SDL2-2.0.14]$ make && make install 

 (3)编译成功生成文文件

[wbyq@wbyq _install]$ ls
bin  include  lib  share

1.3 SDL2_image库编译与安装

  bmp_surface加载jpg格式图片和png格式图片需要相对应库支持

[wbyq@wbyq src_pack]$ sudo apt-get install libjpeg-dev  #安装jpg库
[wbyq@wbyq src_pack]$ sudo apt-get install libpng-dev  #安装png库

 下载地址:SDL_IMAGE
 (1)将 SDL2_image-2.0.5.tar.gz压缩包拷贝至虚拟机解压。

[wbyq@wbyq src_pack]$ tar xvf /mnt/hgfs/ubuntu/software_pack/SDL2_image-2.0.5.tar.gz

 (2)配置编译安装路径

[wbyq@wbyq SDL2_image-2.0.5]$ ./autogen.sh 
[wbyq@wbyq SDL2_image-2.0.5]$ ./configure --prefix=$PWD/_install
[wbyq@wbyq SDL2_image-2.0.5]$ make && make install

 (3)编译成功生成文文件

[wbyq@wbyq _install]$ tree
.
├── include
│   └── SDL2
│       └── SDL_image.h
└── lib
    ├── libSDL2_image-2.0.so.0 -> libSDL2_image-2.0.so.0.2.3
    ├── libSDL2_image-2.0.so.0.2.3
    ├── libSDL2_image.a
    ├── libSDL2_image.la
    ├── libSDL2_image.so -> libSDL2_image-2.0.so.0.2.3
    └── pkgconfig
        └── SDL2_image.pc

4 directories, 7 files

1.4 示例1:SDL显示图片和获取输入出设备数据

 1.4.1 示例代码

#include 
#include 
#include 
#include 
typedef enum
{
    false,
    true
} bool;
int main(int argc,char *argv[])
{
	if(SDL_Init(SDL_INIT_VIDEO))/*初始化SDL*/
	{
		printf("初始化失败ERR=%srn",SDL_GetError());
		return 0;
	}
	/*创建SDL窗口*/
	SDL_Window *window=SDL_CreateWindow("SDL Test", SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,800,480,SDL_WINDOW_SHOWN);
	SDL_Rect rect;
	rect.x=0;
	rect.y=0;
	SDL_Surface *surface=SDL_GetWindowSurface(window);/*获取窗口*/
	SDL_Surface *pngsurface=IMG_Load("bg6.png");
	SDL_Surface *bmp_surface=IMG_Load("1.bmp");
	SDL_BlitSurface(bmp_surface,NULL,surface,NULL);
	SDL_UpdateWindowSurface(window);/*刷新窗口*/
	bool quit= true;

	SDL_Event event;
	while(quit)
	{
		while(SDL_PollEvent(&event))/*监测事件*/
		{
			if(event.type==SDL_QUIT)//关闭窗口
			{
				printf("hello,worldn");
				quit=false;
				printf("quit=%dn",quit);
			}
			else if(event.type==SDL_MOUSEBUTTONDOWN)/*鼠标点击事件*/
			{
				if(event.button.button==SDL_BUTTON_LEFT)/*左键*/
				{
					printf("left clickedn");
					SDL_BlitSurface(bmp_surface,NULL,surface,NULL);
				}
				if(event.button.button==SDL_BUTTON_RIGHT)/*右键*/
				{
					printf("right clickedn");
					SDL_BlitSurface(pngsurface,NULL,surface,NULL);
				}
			}
			else if(event.type==SDL_KEYDOWN)//键盘事件
			{
				
				printf("key=%dn",event.key.keysym.sym);
				if(event.key.keysym.sym==SDLK_UP)
				{
					rect.y-=10;
					printf("upn");
				}
				else if(event.key.keysym.sym==SDLK_DOWN)
				{
					rect.y+=10;
					printf("downn");
				}
				else if(event.key.keysym.sym==SDLK_LEFT)
				{
					rect.x-=10;
					printf("leftn");
				}
				else if(event.key.keysym.sym==SDLK_RIGHT)
				{
					rect.x+=10;
					printf("rightn");
				}
				SDL_BlitSurface(bmp_surface,NULL,surface,NULL);
				SDL_BlitSurface(pngsurface,NULL,surface,&rect);
			}
			SDL_UpdateWindowSurface(window);/*刷新窗口*/
		}
	}
	SDL_FreeSurface(surface);
	SDL_DestroyWindow(window);/*销毁窗口*/
	SDL_Quit();/*关闭SDL*/
	return 0;
}

1.4.2 Makefile文件

CFLAGS =-I/home/wbyq/src_pack/SDL2-2.0.14/_install/include -I/home/wbyq/src_pack/SDL2-2.0.14/_install/include/SDL2 -L/home/wbyq/src_pack/SDL2-2.0.14/_install/lib
CFLAGS +=-L/home/wbyq/src_pack/SDL2_image-2.0.5/_install/lib -I/home/wbyq/src_pack/SDL2_image-2.0.5/_install/include -I/home/wbyq/src_pack/SDL2_image-2.0.5/_install/include/SDL2
CFLAGS+=-lSDL2 -lpthread -lm -ldl -lSDL2_image
app:
	gcc 01sdl_test.c  $(CFLAGS)

1.4.3 运行效果

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASVRf6Zi_5rC0,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10988

    浏览量

    206725
  • 编译
    +关注

    关注

    0

    文章

    614

    浏览量

    32374
  • SDL
    SDL
    +关注

    关注

    0

    文章

    18

    浏览量

    7281
收藏 人收藏

    评论

    相关推荐

    SDL显示文本

       SDL2.0库本身没有文本数据显示相关函数接口,文本显示需要编译安装SDL_ttf库。
    的头像 发表于 09-29 16:32 1581次阅读
    <b class='flag-5'>SDL</b><b class='flag-5'>显示</b>文本

    SDL时间和天气显示

    SDL(Simple DirectMediaLayer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以
    的头像 发表于 12-08 14:15 798次阅读

    Linux下基于SDL库贪吃蛇游戏

    SDL(Simple DirectMediaLayer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以
    的头像 发表于 12-11 14:29 2836次阅读
    Linux下基于<b class='flag-5'>SDL</b>库贪吃蛇游戏

    SDL的示例EMMC无法编译是怎么回事?

    我想要编译 SDL 的 tviibh8msrcexamplessd_hostemmc 来进行参考 不过我复制 main_cm7_0.c 进行编译后,发现有些未定义的错误 error
    发表于 02-01 07:55

    安装好ccs,编译时出现以下图片错误,怎么解决

    安装好ccs,编译时出现以下图片错误,怎么解决
    发表于 05-10 16:28

    SDL的交叉编译问题

    求助!!移植SDL到mini2440开发板上时,在交叉编译SDL_image进行configure之后,再make时出现如下错误:/opt/mini2440/output/lib/libSDL.so
    发表于 12-06 20:50

    怎样将插在mini2440中SD卡的图片显示出来

    各位大神,我想请教下,我的mini2440的板子,上面烧写了内核,以及自己制作的最小根文件系统(没有安装QT),然后移植了交叉编译好了的ffmpeg,以及mplayer,还有sdl库,我想请教下,怎样将SD卡中的
    发表于 12-24 23:33

    移植SDL到JZ2440显示BMP图片

    LOGO的制作, 韦老师第3期讲了如何显示jpeg图片, 那么怎么显示bmp图片?这次我们借助libSDL来实现,我们先移植SDL到Ubun
    发表于 06-29 11:19

    请问怎么快速显示图片到LCD?

    先设置环境变量export SDL_NOMOUSE=1复制代码备注:由于SDL原生只支持bmp图片,所以以上几个图片都是bmp格式。如果需要显示
    发表于 06-06 04:33

    这个图片图片显示实验编译后的结果老是报这个错误是我编译器设置的问题吗?

    这个图片图片显示实验编译后的结果老是报这个错误是我编译器设置的问题吗??谢谢各位!!!
    发表于 08-06 23:33

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

    cd SDL2-2.26.4/ 创建目录mkdir build 配置./configure --prefix=$PWD/build 构建安装make && make install 编译
    发表于 04-06 15:30

    GUI向导编译错误,找不到“SDL2/SDL.h”文件是怎么回事?

    如何找出编译错误:找不到“SDL2/SDL.h”文件 使用 MAC OS 12.6 和最新的guy guider 版本。
    发表于 05-04 08:44

    【昉·星光 2 高性能RISC-V单板计算机体验】使用 SDL2 绘制窗口程序

    libsdl2-dev 软件包安装好 然后编写代码,创建一个窗口并在窗口上显示一个BMP位图,位图和代码如下 位图(论坛不能上传bmp,这里给的是jpg,需要手动转为bmp) 代码 #include
    发表于 08-05 18:54

    基于SDL的自动售票系统的研发

    基于SDL 的自动售票系统的研发顾丽丽 梅杓春(南京邮电大学自动化学院,江苏南京 210003)摘要:本文简要介绍了SDL语言及其支持工具。通过设计自动售票系统实例对如何利用SDL
    发表于 12-18 11:34 21次下载

    SDL下载与配置

    点击[SDL2 核心库下载](https://libsdl.org/download-2.0.php)下载SDL2库,如下图根据编译器选择不同版本(Visual Studo系列选择第一个)。
    的头像 发表于 02-27 14:51 2032次阅读
    <b class='flag-5'>SDL</b>下载与配置