Cocos2d-x之CCImage深入分析
Cocos2d-x之CCImage深入分析
CCImage类:支持从JPG,PNG,TIFF以及数据流,字符串中创建供Cocos2d-x进行访问的图片数据对象。
这是一个非常重要的类,因为它是你使用cocos2d-x来加载图片的基础。目前此类只支持JPG,PNG,TIFF三种图像文件,对于这三种图像文件,CCImage分别使用libjpg,libpng,libtiff进行读取访问和写文件的操作。有兴趣的同学可以上网查询相关图像库的分析和使用,同时建议有能力的同学对此类进行扩展,令它支持更多的图像格式,是为“举一反三”。
学之前最好先了解一下libjpg,libpng,libtiff等图片功能库的使用。可以参见文章底部的参考资料。
现在,先来看CCImage图像头文件:
[cpp]
#ifndef __CC_IMAGE_H__
#define __CC_IMAGE_H__
//派生于CCObject
#include "cocoa/CCObject.h"
//Cocos2d命名空间
NS_CC_BEGIN
class CC_DLL CCImage : public CCObject
{
public:
//构造函数
CCImage();
//析构函数
~CCImage();
//支持的图片类型
typedef enum
{
kFmtJpg = 0, //JPG
kFmtPng, //PNG
kFmtTiff, //TIFF
kFmtRawData, //数据流,要求为RGBA8888
kFmtUnKnown //无效
}EImageFormat;
//对齐方式
typedef enum
{
kAlignCenter = 0x33, //横向纵向都居中.
kAlignTop = 0x13, //横向居中,纵向居上.
kAlignTopRight = 0x12, //横向居右,纵向居上.
kAlignRight = 0x32, //横向居中,纵向居中.
kAlignBottomRight = 0x22, //横向居右,纵向居下.
kAlignBottom = 0x23, //横向居中,纵向居下.
kAlignBottomLeft = 0x21, //横向居左,纵向居下.
kAlignLeft = 0x31, //横向居左,纵向居中.
kAlignTopLeft = 0x11, //横向居左,纵向居上.
}ETextAlign;
//从指定的路径载入一个所支持的格式的图片文件。
bool initWithImageFile(const char * strPath, EImageFormat imageType = kFmtPng);
//从指定的路径载入一个所支持的格式的图片文件,但它是线程安全的,因此可以用在多线程加载图片。
bool initWithImageFileThreadSafe(const char *fullpath, EImageFormat imageType = kFmtPng);
//从内存中加载图片数据。
//参1:指向图片数据所处内存地址的指针。
//参2:图片数据长度
//参3:数据对应图片的格式,
//参4:数据对应图片的宽度
//参5:数据对应图片的高度
//参6:每像素的字节位数,即色深。
bool initWithImageData(void * pData,
int nDataLen,
EImageFormat eFmt = kFmtUnKnown,
int nWidth = 0,
int nHeight = 0,
int nBitsPerComponent = 8);
//从字符串创建图片数据。
//参1:字符串
//参2:要创建的图片宽度,如果填0,则按照字符串的宽度进行设置。
//参3:要创建的图片高度,如果填0,则按照字符串的高度进行设置。
//参4:文字的对齐方式。
//参5:字体名称
//参6:字体大小
bool initWithString(
const char * pText,
int nWidth = 0,
int nHeight = 0,
ETextAlign eAlignMask = kAlignCenter,
const char * pFontName = 0,
int nSize = 0);
//取得图像数据地址
unsigned char * getData() { return m_pData; }
//取得图像数据的长度
int getDataLen() { return m_nWidth * m_nHeight; }
//是否有Alpha通道。
bool hasAlpha() { return m_bHasAlpha; }
//是否有Alpha渐变
bool isPremultipliedAlpha() { return m_bPreMulti; }
//将当前图片数据保存成指定的文件格式。
//参1:绝对路径名
//参2:是否保存成RGB格式
bool saveToFile(const char *pszFilePath, bool bIsToRGB = true);
//定义变量m_nWidth和get接口
CC_SYNTHESIZE_READONLY(unsigned short, m_nWidth, Width);
//定义变量m_nHeight和get接口
补充:移动开发 , 其他 ,