当前位置:编程学习 > wap >>

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接口 补充:移动开发 , 其他 ,

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,