有三个变量需要针对相同的值进行测试(var1或var2或var3> 255)。如果对任何一个的比较都是正确的,则需要将相应变量的值设置为255。这是我想出的:
if (r > 255)
r = 255;
if (g > 255)
g = 255;
if (b > 255)
b = 255;
和
r += (r > 255) * (255 - r);
g += (g > 255) * (255 - g);
b += (b > 255) * (255 - b);
由于它们非常相似,所以我想知道是否有某种方式可以缩短此代码。
由于它们非常相似,所以我想知道是否有某种方式可以缩短此代码。
您可以以某种方式缩短此代码使用宏:
#define LIMIT(v) if (v > 255) v = 255
LIMIT(r);
LIMIT(g);
LIMIT(b);
您可以编写函数来执行此操作:
void saturate(int *p)
{
if(*p > 255)
*p = 255;
}
然后您可以将变量放入数组中并在其上循环:
int colors[3];
for(int i = 0; i < sizeof(colors)/sizeof(colors[0]); i++)
saturate(&colors[i]);