《不靠谱2.x》006.CCSprite(上)001 CCImage

前端之家收集整理的这篇文章主要介绍了《不靠谱2.x》006.CCSprite(上)001 CCImage前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、概述
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、其他的方法感觉不常用或是比较晦涩,暂不细究。

三、总结 1、知道了可使用图片、字符串生成 image 对象,并可保存到指定路径下。

猜你在找的Cocos2d-x相关文章