SDL入门教程(六):SDL读取其它格式的图片
来源:互联网 发布:unity3d 金属材质包 编辑:程序博客网 时间:2024/04/30 08:50
作者:龙飞
1:扩充库(Extension Libraries)
SDL本身所支持的,仅仅是读取bmp格式的图片。要使用其它格式的图片,我们需要使用SDL的扩充库。在下面地址,我们可以下载到相关文件SDL_image-devel-1.2.6-VC8.zip。
http://www.libsdl.org/projects/SDL_image/
与SDL本身的设置一样,将include下的*.h文件拷贝到:
C:/MinGW/include/SDL (MinGW)
C:/Program Files/Microsoft Visual Studio 9.0/VC/include/SDL (VC2008)
将*.lib文件拷贝到:
C:/MinGW/lib (MinGW)
C:/Program Files/Microsoft Visual Studio 9.0/VC/lib (VC2008)
将*.dll文件拷贝到:
C:/WINDOWS/system32
在编译的时候,gcc注意增加共同编译的库文件-lSDL_image,比如,我设置了一个批处理文件g++img.bat内容如下:
在程序的头文件中,需要增加:
2:更加通用的Display Surface构造函数
我们现在可以回头过来修改我们在SDL入门教程(五):6、对C++异常机制的思考,代码重写中的Display Surface类的构造函数,使其能够更加通用的读取其它格式的图片。
3:将图片修改为适合显示的格式
如果转换失败,或者内存溢出,这个函数将返回空指针。
1:扩充库(Extension Libraries)
SDL本身所支持的,仅仅是读取bmp格式的图片。要使用其它格式的图片,我们需要使用SDL的扩充库。在下面地址,我们可以下载到相关文件SDL_image-devel-1.2.6-VC8.zip。
http://www.libsdl.org/projects/SDL_image/
与SDL本身的设置一样,将include下的*.h文件拷贝到:
C:/MinGW/include/SDL (MinGW)
C:/Program Files/Microsoft Visual Studio 9.0/VC/include/SDL (VC2008)
将*.lib文件拷贝到:
C:/MinGW/lib (MinGW)
C:/Program Files/Microsoft Visual Studio 9.0/VC/lib (VC2008)
将*.dll文件拷贝到:
C:/WINDOWS/system32
在编译的时候,gcc注意增加共同编译的库文件-lSDL_image,比如,我设置了一个批处理文件g++img.bat内容如下:
g++ -o MySDL.exe main.cpp -lmingw32 -lSDLmain -lSDL -lSDL_image -mwindows
在VC2008中,需要在projec属性中,Configuration Properties -- Linker -- Input -- Additional Dependencies 下增加SDL_image.lib。在程序的头文件中,需要增加:
#include "SDL/SDL_image.h"
2:更加通用的Display Surface构造函数
我们现在可以回头过来修改我们在SDL入门教程(五):6、对C++异常机制的思考,代码重写中的Display Surface类的构造函数,使其能够更加通用的读取其它格式的图片。
DisplaySurface::DisplaySurface(std::string file_name, const ScreenSurface& screen):
fileName(file_name)
{
SDL_Surface* pSurfaceTemp = IMG_Load(file_name.c_str());
if ( pSurfaceTemp == 0 )
throw ErrorInfo(SDL_GetError());
pSurface = SDL_DisplayFormat(pSurfaceTemp);
if ( pSurface == 0 )
throw ErrorInfo(SDL_GetError());
SDL_FreeSurface(pSurfaceTemp);
pScreen = screen.point();
}
IMG_Load()可以读取多种格式的图片文件,包括BMP, PNM, XPM, LBM, PCX, GIF, JPEG, TGA和PNG。fileName(file_name)
{
SDL_Surface* pSurfaceTemp = IMG_Load(file_name.c_str());
if ( pSurfaceTemp == 0 )
throw ErrorInfo(SDL_GetError());
pSurface = SDL_DisplayFormat(pSurfaceTemp);
if ( pSurface == 0 )
throw ErrorInfo(SDL_GetError());
SDL_FreeSurface(pSurfaceTemp);
pScreen = screen.point();
}
3:将图片修改为适合显示的格式
SDL_Surface *SDL_DisplayFormat(SDL_Surface *surface);
在上面的程序中,我们使用到了函数SDL_DisplayFormat()。在之前的教程中,我一直没有用到这个函数,是因为我还没有发现用SDL_LoadBMP()的时候会出现格式兼容性的问题——即使是图片位深与显示不一致。但是使用IMG_Load()的时候,小小的bug出现了。所以,这里我必须使用SDL_DisplayFormat(),将读取的图片文件转换为适合显示的格式。如果转换失败,或者内存溢出,这个函数将返回空指针。
此篇文章来自【http://blog.csdn.net/lf426/article/details/2215032】
- SDL入门教程(六):SDL读取其它格式的图片
- SDL入门教程(六):SDL读取其它格式的图片
- SDL入门教程
- SDL入门教程
- SDL显示YUV格式图片
- SDL入门教程(五):4、让图片动起来!
- SDL入门教程(五):4、让图片动起来!
- SDL入门教程(八):2、裁剪精灵图片的完整源代码
- SDL入门教程(八):2、裁剪精灵图片的完整源代码
- SDL入门教程(四):3、SDL的软、硬件渲染的深入试验和分析
- SDL入门教程(四):3、SDL的软、硬件渲染的深入试验和分析
- SDL入门教程(二):1、SDL的装载,位标(flags)
- SDL入门教程(四):1、SDL动画的软件渲染(Software Render)
- SDL入门教程(四):2、SDL动画的硬件渲染(Hardware Render)
- SDL入门教程(二):1、SDL的装载,位标(flags)
- SDL入门教程(四):1、SDL动画的软件渲染(Software Render)
- SDL入门教程(四):2、SDL动画的硬件渲染(Hardware Render)
- SDL入门教程(四):2、SDL动画的硬件渲染(Hardware Render)
- Platform_device 和 Platform_driver
- 什么是模室技术?模体的种类和作用是什么?
- 他还心系灾区
- Javascript -- return false / true
- 线程!线程!!线程!!!(Delphi版)
- SDL入门教程(六):SDL读取其它格式的图片
- FTP客户端
- 两种方式解决jquery Ajax 发送中文乱码的方法,
- Spring RestTemplate中文乱码原因
- 运筹帷幄之中,决胜千里之外——之企业战略管理
- 时序电路
- SDL入门教程(七):SDL抠色(Color Keying)
- win7下安装网络共享打印机 hp LaserJet 1010
- 记住用户帐号和密码太麻烦?试试用PhoneID吧!