void scale_brightness( uint8_t array[],
unsigned int cols,
unsigned int rows,
double scale_factor )
{
for (int x = 0; x < (cols*rows); x++)
{
array[x] = round(scale_factor * (double)(array[x]));
if (array[x] > 255 )
{
array[x] = 255;
}
}
}
此函数应该将像素乘以比例因子,并根据乘以该因子使图像变亮或变暗。如果相乘的图像大于 255,则像素阈值为 255。我尝试了代码并输入了 scale_brightness(数组、256、256、2)。这应该将每个像素乘以 2,因此它应该使图像变亮。但是当我运行它时,它变成了黑色,与它应该做的完全相反。我也试过做0,结果变黑了。任何其他颜色只会给我一种深灰色。有人能帮我找出为什么会这样吗?
最佳答案
您的逻辑不起作用,因为 array[x]
不能超过 255,所以 if
主体永远不会执行,并且 array[x]
只是被截断了。使用额外的 double
值进行计算:
double d = round(scale_factor * (double)(array[x]));
if (d >= 255.0 )
{
array[x] = 255;
}
else
{
array[x] = (uint8_t)d;
}
请注意,可以通过排除浮点运算来有效优化此循环。乘以 double
因子可以替换为乘以 int
并右移。
关于c - 当我将像素乘以比例因子时图像变黑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26954876/