c - 将每个像素乘以比例因子

标签 c function pixel multiplication

void scale_brightness( uint8_t array[],
               unsigned int cols,
               unsigned int rows,
               double scale_factor )
{
    for (int x = 0; x < rows; x++)
    {
        for (int y = 0; y < cols; y++)
        {
            array[x] = ceil(scale_factor * array[x]);
            array[y] = ceil(scale_factor * array[y]);
            if (array[x] >= 255 && array[y] >= 255)
            {
                array[x] = 255;
                array[y] = 255;
            }
        }
    }
}

所以这个函数应该将图像中的每个像素乘以比例因子。但由于某种原因,它不起作用。我找不到它有什么问题。有人可以帮我解决这个问题吗?

最佳答案

只需展开纸上的环,您就会看到发生了什么......

第一次迭代(x = 0,y = 0)

array[0] = ceil(scale_factor * array[0]);
array[0] = ceil(scale_factor * array[0]);
if (array[0] >= 255 && array[0] >= 255)
{
    array[0] = 255;
    array[0] = 255;
}

这已经是荒谬的了,您对同一个元素执行相同的操作两次,然后您的 if 语句在同一个元素上检查相同的条件两次,然后将 255 两次分配给同一个值。

第二次迭代(x = 0,y = 1)

array[0] = ceil(scale_factor * array[0]);
array[1] = ceil(scale_factor * array[1]);
if (array[0] >= 255 && array[1] >= 255)
{
    array[0] = 255;
    array[1] = 255;
}

所以现在您再次设置元素 0,即使您刚刚在上次迭代中进行了设置,但至少我们现在正在考虑元素 1。

通过推断,我们可以看到计算将应用于像素 0 到 max(cols, rows)。显然,您的像素数组具有比这更多的像素,可能是(列*行)像素,因此您的算法忽略了大多数像素,但对某些像素应用了多次,这基本上就是它不起作用的原因。

关于c - 将每个像素乘以比例因子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26811396/

相关文章:

java - 黑色像素不会完全变黑?

c - 如何在 C 中将两个稀疏矩阵相乘?

c - 从 C 中的二进制文件调用函数 (main())

javascript - 传递一个函数作为 Javascript 中可能尚不存在的参数

python - Tensorflow - 映射函数

algorithm - 布雷森汉姆算法

c - 以四乘四的方式排列数字

c - C 程序中 ~0 = -1 和 ~1 = -2

javascript - 跟踪变量实例

html - CSS HTML 当我以像素为单位指定宽度时,为什么会根据屏幕宽度调整大小?