SDL系列讲解(七) SDL_image教程
前言
我们SDL默认支持的,只能打开BMP格式的图片。然而我们常见的是Png jpg格式的图片,于是我们这节完成SDL借用自带的三方库,来完成加载渲染png等其他图片格式。
SDL_image简介
使用SDL_image,您可以加载流行的图像格式,如BMP,PNM(PPM / PGM / PBM),XPM,LBM,PCX,GIF,JPEG,PNG,TGA和TIFF格式。 这些被加载到你的SDL_Surface上,并且正常地画在屏幕上。同时, 支持Alpha透明度,比如加载PNG图片。
下载配置SDL_image库
打开官网http://www.libsdl.org/projects/SDL_image/
下载这里的 SDL2_image-2.0.1.zip,解压到我们的工程目录jni/SDL2_image下面
下一级目录结构如下,记得不要嵌套啦。(后续移植不强调了,这一注意的是jni下面放的目录,目录里面直接有个Android.mk,系统就是找这个,然后编译,所以记住这点)
然后我们在jni/src/Android.mk里面的
LOCAL_SHARED_LIBRARIES := SDL2
修改成
LOCAL_SHARED_LIBRARIES := SDL2 SDL2_image
将SDL2_image库加载进来。
这里讲解下,这个名字怎么来的,我们去看SDL2_image目录下面的Android.mk 里面有一行
LOCAL_MODULE := SDL2_image
这个指示编译的模块名字
然后我们编译,编译过程有个错误。
我们来到这个文件,修改这个包含为:
#include <machine/cpu-features.h>
改为:
#include <arm-linux-androideabi/ machine/cpu-features.h>
为什么这样子呢?因为这里查找头文件是在ndk下面的ndk-bundlesysrootusrinclude目录进行查找,所以我们新的ndk包,发现移动到arm-linux-androideabi目录下了,所以要加这个。
同时,如果还有报错,需要去掉我们配置的x86指令集。
具体在jni/Application.mk 里面移除掉
APP_ABI := armeabi armeabi-v7a x86
为
APP_ABI := armeabi armeabi-v7a
同时将项目下app/build.gradle里面,将
abiFilters "armeabi" ,"armeabi-v7a","x86"
改为
abiFilters "armeabi" ,"armeabi-v7a"
在SDL2_image/Android.mk 里面加入一行:
LOCAL_CFLAGS += -D__ARM_ARCH__
来保证arm下能编译通过。
验证加载JPG图片
在工程的assets目录下面,放入一个test.jpg文件
然后我们修改jni/src/main.c文件,具体修改如下:
编译运行,可以在手机端看到效果。
代码地址:
https://github.com/luxiaoming/SDL-study
- 与Ajax同样重要的jQuery(2)
- 寻找第K元素的八大算法、源码及拓展
- 索引优先队列-IndexedPrirotyQueue的原理及实现(源码)
- Java 集合系列02之 Collection架构
- 开发者需要掌握的JS事件
- Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例
- Kosaraju算法、Tarjan算法分析及证明--强连通分量的线性算法
- 关于curl网站运维与开发的那些事
- 并查集Union-find及其在最小生成树中的应用
- go 语言的库文件放在哪里?如何通过nginx代理后还能正确获取远程地址
- 离线Tarjan算法-最近公共祖先问题
- Java文件上传下载实训
- 【网络编程系列】二:socket通信原理及实践
- textrank算法原理与提取关键词、自动提取摘要PYTHON
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 旋转数组
- 设计模式之抽象工厂模式
- 微信小游戏的环境搭建
- 威胁事件告警分析技巧及处置(一)
- docker数据卷备份恢复以及配置桥接网络
- ES对磁盘的要求都有哪些,大部分你可能不知道
- docker通过模板创建镜像以及容器、仓库和数据管理
- Form表单类组件与Map地图组件
- 转录组分析 | 使用Hisat2进行序列比对
- 最后一个页面:构建电影详情页面
- 安装docker以及通过容器创建镜像
- 转录组分析 | 使用trim-galore去除低质量的reads和adaptor
- 设计模式之工厂方法模式
- Ubuntu上安装TensorFlow(python2.7版)
- 转录组分析 | fastqc进行质控与结果解读