我正在开发一个处理图像的程序。我在调整对比度和亮度的功能上遇到了问题。我需要根据我从用户那里收到的输入来计算每个 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 被执行了一百万次,大多数时候是不必要的。
我想过只是将双精度转换回字节,但它只是读取双精度的第一个字节,如果它大于字节可以处理的值,则不会最大化该值。有什么明显的方法可以优化这个我刚刚错过的范围检查吗?谢谢你。
不,if
是比较值的“黄金标准”方式。如果您需要确保该值在一个范围内,if
则可以这样做。如果您必须有其他选择:使用只能处理 0-255 值的现有类型,但“溢出”行为“定义较少”。如果您制作自己的类型,if
它无论如何都可能在其中使用。
你的理由“很多不必要的如果”是没有什么可担心的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句