读取Jpg和mask图片

来源:互联网 发布:虚拟机ubuntu怎么联网 编辑:程序博客网 时间:2024/06/05 08:10

最近Dota传奇比较火,小伙伴都在解剖它,然后发现它的UI不是png图片,而是jpg加上一个I8的png.看了下cocoachina论坛上有人发布了一个读取函数,可惜的是那个函数有点错误.所以自己写了一个,在这里mark一下.

Texture2D* FileIO::openImage(const char* jpgFile,const char* maskFile){std::string name = jpgFile;name.erase(name.length()-4,4);auto ret = Director::getInstance()->getTextureCache()->getTextureForKey(name);if(ret)return ret;auto _img = new Image();auto _jpg = new Image();auto _mask = new Image();do {if(!_jpg->initWithImageFile(jpgFile))break;if(!_mask->initWithImageFile(maskFile))break;auto _color = _jpg->getData();auto _alpha = _mask->getData();auto _w = _jpg->getWidth();auto _h = _jpg->getHeight();auto _l = _jpg->getDataLen();auto _out = new unsigned char[_l*4];for(int idx = 0; idx < _l; idx++){_out[idx*4]  = _color[idx*3];_out[idx*4+1] = _color[idx*3+1];_out[idx*4+2] = _color[idx*3+2];_out[idx*4+3] = _alpha[idx];}_img->initWithRawData(_out,_l*4,_w,_h,4);ret = Director::getInstance()->getTextureCache()->addImage(_img,name);SAFE_DELETE(_out);break;} while (1);SAFE_DELETE(_img);SAFE_DELETE(_jpg);SAFE_DELETE(_mask);return ret;}




0 0