我正在开发一个处理图像的程序。 我在调整对比度和亮度的功能上遇到麻烦。 我需要根据我从用户那里收到的输入来为每个RGB分量计算一个值。 问题是,我需要确保上述计算后的最终值不大于255或小于0。这样它就可以容纳在一个字节内。
temp = c * dataPtr[0] + b; //variable temp is of type double.
if (temp > 255)
{
temp = 255;
}
else if (temp < 0)
{
temp = 0.0;
}
dataPtr[0] = (byte)(Math.Round(temp));
我对每个像素的每个RGB分量重复此操作,因此ifs被执行一百万次,大多数情况下是不必要的。
我考虑过只将双精度型转换回字节,但是它只读取双精度型的第一个字节,并且如果该值大于一个字节可以处理的值,则不会最大化该值。 有什么明显的方法可以优化我所缺少的这种范围检查吗? 谢谢。
答案 0 :(得分:1)
不。 if
是比较值的“黄金标准”方法。如果需要确保该值在if
范围内,则可以这样做。
如果您必须选择其他方法,请使用现有类型,该类型只能处理0-255的值,但是“溢出”行为是“未定义的”。如果您使用自己的类型,则可能仍会在其中使用if
。
您不必担心“很多不必要的假设”。