热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【音视频开发四】基础学习篇SDL加载图片并显示

本篇的主要内容是利用SDL加载并显示一张图片,然后再去进行更多的音视频操作。SDL2_Image配置在SDL中加载png或者jpeg图片用不到上面两个库了

本篇的主要内容是利用 SDL 加载并显示一张图片,然后再去进行更多的音视频操作。


SDL2_Image 配置

在 SDL 中加载 png 或者 jpeg 图片用不到上面两个库了,需要用到 SDL 特定的图片库 SDL_Image ,执行以下命令去下载:

brew install sdl2_image

我用的版本是 2.0.5 ,也是目前最新的版本,之后我们要在 CMake 中去配置它。


CMake 工程配置

av-beginner 项目的 CMake 配置做了一些改动,创建了一个 cmake_utils 的目录,在该目录下创建了一个 CMakeLists.txt ,里面存放一些自定义的函数,专门用来做开源库的链接加载工作,如下图红框内容所示:

定义了一个 init_path 的宏,宏的功能和函数是有些类似的,在里面定义了不同开源库的路径变量,后续只要引用这些变量就好了。如果你的电脑上路径不同,修改这里的宏定义就行。

当下载了 SDL_Image 之后,找到它的路径,把它的库加载到 CMake 链接目录中来,也就是要调用 link_directories 方法,这里同样可以定义一个宏:

macro(link_sdl_image)message("link sdl image library and path is ${sdl_image_dir}")include_directories(${sdl_image_dir}/include/SDL2)link_directories(${sdl_image_dir}/lib)
endmacro()

之后就需要把目标执行文件或者目标库与 SDL_Image 开源库关联起来,也就是 target_link_libraries 方法,同样定义一个宏:

macro(target_link_sdl_image name)message("${name} link sdl image")target_link_libraries(${name}SDL2_image)
endmacro()

这个宏有个参数 name ,它就是要链接的目标文件 target 。


对于 SDL 库或者其他库,也可以创建类似的宏,具体在源码中能看到。


在完成了 SDL_Image 的 CMake 配置之后,就需要在工程的主 CMakeLists.txt 文件中把它包含进去,现在还只是在 cmake_utils 目录中,这样是引用不到宏的。

通过 add_subdirectory 方法将定义的功能添加进来,接下来就可以使用了。

同时,对于 SDL 项目代码,单独创建一个文件夹去存放,再根据每个小项又划分文件夹:

如上图所示,针对每个小项又有单独的 CMakeLists.txt 配置文件,在里面按需执行动态库的关联就好了。

【文章福利】:小编整理了一些相关的音视频开发学习资料(资料包括C/C++,Linux,FFmpeg  webRTC  rtmp  hls rtsp ffplay  srs 等),qun994289133免费分享,有需要的可以加群领取哦!

经过以上的工程配置整改,对于后续的开发模块划分是很有帮助的,不仅便于添加各种开源库,更利于去单个编译项目。

后续添加的库都会按照这个模式进行添加。


SDL_Image 加载 图片并显示

完成了配置之后,就可以进行 SDL_Image 的开发了,整个开发流程比较简单。

前面的文章中我们创建并展示了 SDL_Window,SDL_Window 内有一个叫做 SDL_Surface 的结构,实际上它才是最终渲染展示的。

我们加载一张图片,并将图片转换成 SDL_Surface ,然后把图片对应的 SDL_Surface 转换到 SDL_Window 对应的 SDL_Surface ,再更新一下 SDL_Window 的 SDL_Surface 内容,渲染到屏幕就好了。

核心代码如下所示:

// 得到 SDL_Window 的 SDL_SurfaceSDL_Surface *pWindowSurface = SDL_GetWindowSurface(pWindow);// 根据图片创建一个 SDL_SurfaceSDL_Surface *pImageSurface = IMG_Load(image_path.c_str());bool bQuit = false;SDL_Event windowEvent;while (!bQuit){while (SDL_PollEvent(&windowEvent)){switch (windowEvent.type){case SDL_QUIT:bQuit = true;break;default:break;}}// 将 pImageSurface 的内容传输到 上SDL_BlitSurface(pImageSurface, nullptr,pWindowSurface,nullptr);// 上屏操作,将 Surface 内容显示到屏幕上SDL_UpdateWindowSurface(pWindow);}

 最终结果如下:

 


总结

以上就是音视频基础学习连载的 004 篇。

完成了 SDL 加载图片并显示的流程,整体代码比较简单

 


推荐阅读
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 刘连响:为什么看好小程序音视频在教育行业的应用?
    作者简介:刘连响,一起玩耍科技创始人。2013年起开始研究WebRTC,对音视频处理、直播、实时音视频相关技术非常感兴趣,具 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
  • 说明:主要是基于ghostyu网友整理的《 armmini2440基于v4l2ffmpegx264的视频远程监控》。自己做了一遍,遇到不少问题,就整理记录下来。 1、平台硬件:ar ... [详细]
  • ffmpeg  spydroid jrtplib
    2019独角兽企业重金招聘Python工程师标准手机上采用Spydroid程序。https:github.comfyhertzspydroid-ipcamera先用libcu ... [详细]
author-avatar
先人掌
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有