多张图片合成一张图片(alpha混合)
来源:互联网 发布:自学javascript要多久 编辑:程序博客网 时间:2024/05/16 07:00
代码:
目标值 = 上图alpha值*上图值 + (1-上图alpha值)*下图值 alpha = [0, 1];- CCImage* body = new CCImage();
- body->initWithImageFile("b.png", CCImage::kFmtPng);
- CCImage* cloth = new CCImage();
- cloth->initWithImageFile("y.png", CCImage::kFmtPng);
- CCImage* hair = new CCImage();
- hair->initWithImageFile("t.png", CCImage::kFmtPng);
- unsigned char *bData = body->getData();
- unsigned char *cData = cloth->getData();
- unsigned char *hData = hair->getData();
- int iIndex = 0;
- for (int i = 0; i < body->getHeight(); i ++)
- {
- for (int j = 0; j < body->getWidth(); j ++)
- {
- int iBPos = iIndex;
- unsigned int bodyB = bData[iIndex];
- unsigned int clothB = cData[iIndex];
- unsigned int hairB = hData[iIndex];
- iIndex ++;
- unsigned int bodyG = bData[iIndex];
- unsigned int clothG = cData[iIndex];
- unsigned int hairG = hData[iIndex];
- iIndex ++;
- unsigned int bodyR = bData[iIndex];
- unsigned int clothR = cData[iIndex];
- unsigned int hairR = hData[iIndex];
- iIndex ++;
- unsigned int bodyA = bData[iIndex];
- unsigned int clothA = cData[iIndex];
- unsigned int hairA = hData[iIndex];
- iIndex ++;
- //身体和衣服混合
- bodyB = clothB*(clothA/255.f) + ((255.f-clothA)/255.f)*bodyB;
- bodyG = clothG*(clothA/255.f) + ((255.f-clothA)/255.f)*bodyG;
- bodyR = clothR*(clothA/255.f) + ((255.f-clothA)/255.f)*bodyR;
- bodyA =((clothA/255.f)*(clothA/255.f)+((255.f-clothA)/255.f)*(bodyA/255.f))*255.f;
- //身体和衣服混合后,再和头发混合
- bodyB = hairB*(hairA/255.f) + ((255.f-hairA)/255.f)*bodyB;
- bodyG = hairG*(hairA/255.f) + ((255.f-hairA)/255.f)*bodyG;
- bodyR = hairR*(hairA/255.f) + ((255.f-hairA)/255.f)*bodyR;
- bodyA =((hairA/255.f)*(hairA/255.f)+((255.f-hairA)/255.f)*(bodyA/255.f))*255.f;
- //结果值
- bData[iBPos] = (unsigned char)bodyB;
- bData[iBPos + 1] = (unsigned char)bodyG;
- bData[iBPos + 2] = (unsigned char)bodyR;
- bData[iBPos + 3] = (unsigned char)bodyA;
- }
- }
- CCTexture2D* texture = new CCTexture2D;
- texture->initWithImage(body);
- CCSprite* bSprite = CCSprite::spriteWithTexture(texture);
- bSprite->setPosition(ccp(240,150));
- addChild(bSprite, 1);
- body->release();
- cloth->release();
- hair->release();
- texture->release();
但是不建议在批量处理图片混合时使用,非常吃内存,手机撑不住
0 0
- 多张图片合成一张图片(alpha混合)
- 多张图片合成一张图片
- iOS开发图片合成,多张图片合成一张图片
- 多张UIImage图片合成一张
- 两张(多张)图片合成一张图片
- 将两张(多张图片)合成一张图片
- 34.UIImage — 把多张图片合成一张图
- 【代码笔记】iOS-多张图片合成一张
- 多张图片合成一张的ps技术
- Unity UGUI 多张图片合成一张 记时 显示ICO
- 三张jpg图片合成一张
- 多张图片合成一张,显示时只显示一张,只显示图片中的一部分
- IOS两张图片合成为一张图片
- IOS两张图片合成为一张图片
- 【工具】多张图片合成
- 多张图片合成PDF .
- java合成多张图片
- java图片处理——多张图片合成一张Gif图片并播放或Gif拆分成多张图片
- sql try catch
- Android项目之智能聊天机器人Atom
- java apache commons HttpClient发送get和post请求的学习整理
- Oracle常用常考集合
- Eclipse打开java文件
- 多张图片合成一张图片(alpha混合)
- qstringlist 迭代风格
- xml
- openCV2 的精髓——深入讲解Mat原理(非如何使用)
- 我与C++设计模式(二十一)——迭代器模式
- Linux中的shift命令
- 【胡逼蛋砍】——上
- Add Binary
- 输入时间,输入下一秒时间