请问如何把图片的某个颜色修改为其他颜色

主要用于不同阵营的单位,有颜色的差别,不是修改全局色相,就是修改某个值的颜色,请问cocos里面有修改像素的相应接口吗?

没有,这个需要你自己写shader

应该可以获取某个图片的二进制数据,然后遍历进行修改与混合数据,可以吧?使用uint8array重新渲染。可以吗?不写shader

shader最适合处理这种方式,获取数据然后修改混合数据首先内存增加,需要保存修改后的数据,

			Sprite* label1 = (Sprite*)p1;
			Sprite* label2 = (Sprite*)p2;

			auto n1GLProgram = label1->getGLProgram();
			auto n2GLProgramState = label2->getGLProgramState();
			const char* vshader = R"(
attribute vec4 a_position;
attribute vec2 a_texCoord;
attribute vec4 a_color;
#ifdef GL_ES
varying lowp vec4 v_fragmentColor;
varying mediump vec2 v_texCoord;
#else
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
#endif

void main()
{
   gl_Position = CC_PMatrix * a_position;
   v_fragmentColor = a_color;
   v_texCoord = a_texCoord;
}			)";
			const char* changefs = R"(
#ifdef GL_ES
precision lowp float;
#endif

varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
uniform vec3 u_mask;

void main()
{
	vec4 texColor = texture2D(CC_Texture0, v_texCoord);
   texColor.rgb = vec3(texColor.r * u_mask.r , texColor.g * u_mask.g , texColor.b * u_mask.b);
   gl_FragColor = texColor;
}
			)";
			const char* notredfs = R"(
#ifdef GL_ES
precision lowp float;
#endif
varying vec2 v_texCoord;  
void main()
{
   vec4 texColor = texture2D(CC_Texture0, v_texCoord);
   texColor.r = 0;
   gl_FragColor = texColor;
}
			)";
			p3 = n1GLProgram;
			p4 = n2GLProgramState;
			auto program1 = GLProgram::createWithByteArrays(vshader, notredfs);
			auto program2 = GLProgram::createWithByteArrays(vshader, changefs);
			auto program2State = GLProgramState::getOrCreateWithGLProgram(program2);
			program2State->setUniformVec3("u_mask", Vec3(0.5f,0.3f,0.8f));
			label1->setGLProgram(program1);
			label2->setGLProgramState(program2State);

实际效果如何