一、概述
CCSprite涉及到了CCTexture2D、CCSpriteFrame、CCSpriteBatchNode,因此在了解CCSprite前,肯定要先对它们进行了解。而CCTexture2D又涉及到了CCImage,所以这里先来了解CCImage,源码如下:
class CC_DLL CCImage : public CCObject
{
public:
CCImage();
~CCImage();
typedef enum
{
kFmtJpg = 0,kFmtPng,kFmtTiff,kFmtWebp,kFmtRawData,kFmtUnKnown
}EImageFormat;
typedef enum
{
kAlignCenter = 0x33,///< Horizontal center and vertical center.
kAlignTop = 0x13,///< Horizontal center and vertical top.
kAlignTopRight = 0x12,///< Horizontal right and vertical top.
kAlignRight = 0x32,///< Horizontal right and vertical center.
kAlignBottomRight = 0x22,///< Horizontal right and vertical bottom.
kAlignBottom = 0x23,///< Horizontal center and vertical bottom.
kAlignBottomLeft = 0x21,///< Horizontal left and vertical bottom.
kAlignLeft = 0x31,///< Horizontal left and vertical center.
kAlignTopLeft = 0x11,///< Horizontal left and vertical top.
}ETextAlign;
/** @brief Load the image from the specified path. @param strPath the absolute file path. @param imageType the type of image,currently only supporting two types. @return true if loaded correctly. */
bool initWithImageFile(const char * strPath,EImageFormat imageType = kFmtPng);
/* @brief The same result as with initWithImageFile,but thread safe. It is caused by loadImage() in CCTextureCache.cpp. @param fullpath full path of the file. @param imageType the type of image,currently only supporting two types. @return true if loaded correctly. */
bool initWithImageFileThreadSafe(const char *fullpath,EImageFormat imageType = kFmtPng);
/** @brief Load image from stream buffer. @warning kFmtRawData only supports RGBA8888. @param pBuffer stream buffer which holds the image data. @param nLength data length expressed in (number of) bytes. @param nWidth,nHeight,nBitsPerComponent are used for kFmtRawData. @return true if loaded correctly. */
bool initWithImageData(void * pData,int nDataLen,EImageFormat eFmt = kFmtUnKnown,int nWidth = 0,int nHeight = 0,int nBitsPerComponent = 8);
/** @brief Create image with specified string. @param pText the text the image will show (cannot be nil). @param nWidth the image width,if 0,the width will match the text's width. @param nHeight the image height,the height will match the text's height. @param eAlignMask the test Alignment @param pFontName the name of the font used to draw the text. If nil,use the default system font. @param nSize the font size,use the system default size. */
bool initWithString(
const char * pText,int nWidth = 0,int nHeight = 0,ETextAlign eAlignMask = kAlignCenter,const char * pFontName = 0,int nSize = 0);
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) || (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
bool initWithStringShadowStroke(
const char * pText,int nWidth = 0,int nHeight = 0,ETextAlign eAlignMask = kAlignCenter,const char * pFontName = 0,int nSize = 0,float textTintR = 1,float textTintG = 1,float textTintB = 1,bool shadow = false,float shadowOffsetX = 0.0,float shadowOffsetY = 0.0,float shadowOpacity = 0.0,float shadowBlur = 0.0,bool stroke = false,float strokeR = 1,float strokeG = 1,float strokeB = 1,float strokeSize = 1
);
#endif
unsigned char * getData() { return m_pData; }
int getDataLen() { return m_nWidth * m_nHeight; }
bool hasAlpha() { return m_bHasAlpha; }
bool isPremultipliedAlpha() { return m_bPreMulti; }
/** @brief Save CCImage data to the specified file,with specified format. @param pszFilePath the file's absolute path,including file suffix. @param bIsToRGB whether the image is saved as RGB format. */
bool saveToFile(const char *pszFilePath,bool bIsToRGB = true);
CC_SYNTHESIZE_READONLY(unsigned short,m_nWidth,Width);
CC_SYNTHESIZE_READONLY(unsigned short,m_nHeight,Height);
CC_SYNTHESIZE_READONLY(int,m_nBitsPerComponent,BitsPerComponent);
protected:
bool _initWithJpgData(void *pData,int nDatalen);
bool _initWithPngData(void *pData,int nDatalen);
bool _initWithTiffData(void *pData,int nDataLen);
bool _initWithWebpData(void *pData,int nDataLen);
// @warning kFmtRawData only support RGBA8888
bool _initWithRawData(void *pData,int nDatalen,int nWidth,int nHeight,int nBitsPerComponent,bool bPreMulti);
bool _saveImageToPNG(const char *pszFilePath,bool bIsToRGB = true);
bool _saveImageToJPG(const char *pszFilePath);
unsigned char *m_pData;
bool m_bHasAlpha;
bool m_bPreMulti;
private:
// noncopyable
CCImage(const CCImage& rImg);
CCImage & operator=(const CCImage&);
};
二、分析
1、首先是两个枚举类型,其中一个标记图片的格式,作为初始化方法的参数;另一个用于标记文本的对齐方式,同样是作为初始化方法的参数。
2、初始化方法则是分别为:通过绝对路径(获得路径方法待究)、图片数据(不知道什么意思)、字符串来生成图片对象。其中通过字符串来声明的话,可以设置字体、大小、对齐方式、渐变色、阴影偏移和线宽,可以说是非常丰富。
3、还有个方法,可以将图片保存到指定路径下,应该挺有用的,比如存储截图。
4、其他的方法感觉不常用或是比较晦涩,暂不细究。