Colors 在简单函数中插值颜色
使用下面的代码,我应该能够执行WC_插值颜色0xff0000、0xFFFF00、0.5,并获得介于本例中指定的红色和黄色两种颜色之间的颜色。pos值应介于1.0和0.0之间。代码显然还没有完成,我不知道下一步该怎么做。还有其他人试过这样做吗?有人能告诉我怎么做吗?现在,在这种情况下,代码总是返回黄色的结束颜色。提前谢谢,请解释一下,以便我能从中学习Colors 在简单函数中插值颜色,colors,gradient,interpolation,pawn,Colors,Gradient,Interpolation,Pawn,使用下面的代码,我应该能够执行WC_插值颜色0xff0000、0xFFFF00、0.5,并获得介于本例中指定的红色和黄色两种颜色之间的颜色。pos值应介于1.0和0.0之间。代码显然还没有完成,我不知道下一步该怎么做。还有其他人试过这样做吗?有人能告诉我怎么做吗?现在,在这种情况下,代码总是返回黄色的结束颜色。提前谢谢,请解释一下,以便我能从中学习 WC_InterpolateColor(start, end, Float:pos) { new start_bytes[1], end_b
WC_InterpolateColor(start, end, Float:pos) {
new start_bytes[1], end_bytes[1];
start_bytes[0] = start;
end_bytes[0] = end;
for (new i = 0; i < 4; i++) {
start_bytes{i} = floatround(start_bytes{i} * (1.0-pos) + end_bytes{i} * pos);
}
return end_bytes[0];
}
使用的语言是典当,一种非常类似于C++的语言。关键字new类似于执行int或float,在本例中是int。事实上,您已经非常接近您的目标:只需将start_bytes{i}=替换为end_bytes{i}= 但是,我也尝试创建一个类似的函数,我考虑到颜色字节实际上是颜色分量强度的平方根,所以我首先将其平方,然后混合它。以下是一段摘录: 我们得到了同样的想法,将颜色存储在一个单元格数组中,然后访问单个字节,但是4个字符与具有较小单元格大小的机器兼容,对于4个字节的单元格,它相当于1
stock BlendColors(col1, col2, Float:t)
{
new c1[4 char], c2[4 char];
GetColorComponentsArray(col1, c1);
GetColorComponentsArray(col2, c2);
if(c2{3} == 0)
{
return CreateColorRGBA(
c1{0}, c1{1}, c1{2},
BlendAlphaComponent(c1{3}, c2{3}, t)
);
}else{
return CreateColorRGBA(
BlendColorComponent(c1{0}, c2{0}, t),
BlendColorComponent(c1{1}, c2{1}, t),
BlendColorComponent(c1{2}, c2{2}, t),
BlendAlphaComponent(c1{3}, c2{3}, t)
);
}
}
static stock GetColorComponentsArray(color, components[4 char])
{
components[0] = color;
}
static stock CreateColorRGBA(r, g, b, a=0xFF)
{
return (r << 24) | (g << 16) | (b << 8) | a;
}
static stock BlendColorComponent(c1, c2, Float:t)
{
return floatround(floatsqroot((1.0-t)*c1*c1 + t*c2*c2));
}
static stock BlendAlphaComponent(a1, a2, Float:t)
{
return floatround((1.0-t)*a1 + t*a2);
}