本文来自http://blog.csdn.net/runaying ,引用必须注明出处!
cocos2d-x节点(CCImage.h)API
温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记
加载图片,储存图片,例如,从 stream buffer 里面加载图片,从指定路径加载图片,把文本初始化为图片
///cocos2d-x-3.0alpha0/cocos2dx/platform //加载图片,储存图片,例如,从 stream buffer 里面加载图片,从指定路径加载图片,把文本初始化为图片 #ifndef __CC_IMAGE_H__ #define __CC_IMAGE_H__ #include "cocoa/CCObject.h" #include "textures/CCTexture2D.h" //当我们尝试在 Texture2D 上使用其他像素格式时, premultiply(预乘)alpha 或者效果就会出现错误 #define CC_RGB_PREMULTIPLY_ALPHA(vr, vg, vb, va) \ (unsigned)(((unsigned)((unsigned char)(vr) * ((unsigned char)(va) + 1)) >> 8) | \ ((unsigned)((unsigned char)(vg) * ((unsigned char)(va) + 1) >> 8) << 8) | \ ((unsigned)((unsigned char)(vb) * ((unsigned char)(va) + 1) >> 8) << 16) | \ ((unsigned)(unsigned char)(va) << 24)) NS_CC_BEGIN /** * @addtogroup platform * @{ */ /** @brief 我们可以告诉 mipmap 什么时候开始,持续多久的结构 */ typedef struct _MipmapInfo { unsigned char* address; int len; }MipmapInfo; class CC_DLL Image : public Object { public: friend class TextureCache; /** * @js ctor */ Image(); /** * @js NA * @lua NA */ virtual ~Image(); /** 支持的图片格式 */ enum class Format { //! JPEG JPG, //! PNG PNG, //! TIFF TIFF, //! WebP WEBP, //! PVR PVR, //! ETC ETC, //! S3TC S3TC, //! ATITC ATITC, //! Raw Data RAW_DATA, //! Unknown format UNKOWN }; enum class TextAlign { CENTER = 0x33, ///< Horizontal center and vertical center. //水平居中、垂直居中 TOP = 0x13, ///< Horizontal center and vertical top. //水平居中、垂直向上 TOP_RIGHT = 0x12, ///< Horizontal right and vertical top. //水平向右、垂直向上 RIGHT = 0x32, ///< Horizontal right and vertical center. //水平向右、垂直居中 BOTTOM_RIGHT = 0x22, ///< Horizontal right and vertical bottom. //水平向右、垂直向下 BOTTOM = 0x23, ///< Horizontal center and vertical bottom. //水平向左、垂直向下 BOTTOM_LEFT = 0x21, ///< Horizontal left and vertical bottom. //水平向左、垂直向下 LEFT = 0x31, ///< Horizontal left and vertical center. //水平向左、垂直居中 TOP_LEFT = 0x11, ///< Horizontal left and vertical top. //水平向左、垂直向上 }; /** @brief 从指定的路径加载图片. @param path 文件的绝对路径. @return true 如果正确加载. */ bool initWithImageFile(const char *path); /** @brief 从 stream buffer 加载图像. @param data 保存图像数据的 stream buffer. @param dataLen data 表示数据的长度 (number of bytes). @return true 如果正确加载. * @js NA * @lua NA */ bool initWithImageData(const unsigned char * data, int dataLen); // @warning kFmtRawData only support RGBA8888 bool initWithRawData(const unsigned char * data, int dataLen, int width, int height, int bitsPerComponent, bool preMulti = false); /** @brief 使用指定的字符串,创建一个图片 @param text 文字图像显示 (cannot be nil). @param width 图像的宽度,如果为0,宽度将匹配文本的宽度。 @param height 图像的高度,如果为0,高度匹配文本的高度。 @param alignMask the test Alignment //对齐方式 @param fontName 用于绘制文本的字体名称. 如果为 nil, 使用系统默认的字体 @param size 字体大小,如果为0,则使用系统默认的大小。 * @js NA * @lua NA */ bool initWithString( const char * text, int width = 0, int height = 0, TextAlign alignMask = TextAlign::CENTER, const char * fontName = 0, int size = 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, TextAlign eAlignMask = TextAlign::CENTER, 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 // Getters inline unsigned char * getData() { return _data; } inline int getDataLen() { return _dataLen; } inline Format getFileType() {return _fileType; } inline Texture2D::PixelFormat getRenderFormat() { return _renderFormat; } inline int getWidth() { return _width; } inline int getHeight() { return _height; } inline bool isPremultipliedAlpha() { return _preMulti; } inline int getNumberOfMipmaps() { return _numberOfMipmaps; } inline MipmapInfo* getMipmaps() { return _mipmaps; } inline bool hasPremultipliedAlpha() { return _hasPremultipliedAlpha; } int getBitPerPixel(); bool hasAlpha(); bool isCompressed(); /** @brief 以指定的格式,将图像数据保存到指定的文件 @param filePath 文件的绝对路径,包括文件后缀 @param isToRGB 是否将图片保存为RGB格式 */ bool saveToFile(const char *filePath, bool isToRGB = true); protected: bool initWithJpgData(const unsigned char * data, int dataLen); bool initWithPngData(const unsigned char * data, int dataLen); bool initWithTiffData(const unsigned char * data, int dataLen); bool initWithWebpData(const unsigned char * data, int dataLen); bool initWithPVRData(const unsigned char * data, int dataLen); bool initWithPVRv2Data(const unsigned char * data, int dataLen); bool initWithPVRv3Data(const unsigned char * data, int dataLen); bool initWithETCData(const unsigned char * data, int dataLen); bool initWithS3TCData(const unsigned char * data, int dataLen); bool initWithATITCData(const unsigned char *data, int dataLen); bool saveImageToPNG(const char *filePath, bool isToRGB = true); bool saveImageToJPG(const char *filePath); private: /** @brief 确定我们可以有多少 mipmaps。相同的定义,但它尊重命名空间 */ static const int MIPMAP_MAX = 16; unsigned char *_data; int _dataLen; int _width; int _height; Format _fileType; Texture2D::PixelFormat _renderFormat; bool _preMulti; MipmapInfo _mipmaps[MIPMAP_MAX]; // 指向 mipmap 图片 int _numberOfMipmaps; // false 如果我们不能自动检测图像是经过预乘. bool _hasPremultipliedAlpha; private: // noncopyable //不可拷贝 Image(const Image& rImg); Image & operator=(const Image&); /* @brief 与 initWithImageFile 有同样的结果, 但是线程是安全的,它是受 TextureCache.cpp 的 loadImage()影响 . @param fullpath 这个文件的完整路径. @param imageType 图像的类型,目前仅支持两种类型 @return true if loaded correctly. */ bool initWithImageFileThreadSafe(const char *fullpath); Format detectFormat(const unsigned char * data, int dataLen); bool isPng(const unsigned char * data, int dataLen); bool isJpg(const unsigned char * data, int dataLen); bool isTiff(const unsigned char * data, int dataLen); bool isWebp(const unsigned char * data, int dataLen); bool isPvr(const unsigned char * data, int dataLen); bool isEtc(const unsigned char * data, int dataLen); bool isS3TC(const unsigned char * data,int dataLen); bool isATITC(const unsigned char *data, int dataLen); }; // end of platform group /// @} NS_CC_END #endif // __CC_IMAGE_H__