我是一个相当称职的 Java 程序员,对 C 语言非常陌生。我正在尝试优化一个具有四种操作模式的例程。
我遍历图像中的所有像素并根据传递的“模式”计算新的像素值。
我的问题是关于两个嵌套 for 循环中 switch 语句的开销。我会对任何有关基本 C 语句、数学和逻辑运算的相对效率的文档链接感兴趣。
代码如下;
for (x = 0; x < width; x++) {
for (y = 0; y < height; y++) {
switch (mode) /* select the type of calculation */
{
case 0:
weight = dCentre / maxDistanceEdge;
case 1:
weight = (float)x/width;
break;
case 2:
weight = (float)y/height;
break;
case 3:
weight = dBottomLeft / maxDistanceCorner;
break;
case 4:
weight = dTopRight / maxDistanceCorner;
break;
default:
weight = 1;
break;
}
// Calculate the new pixel value given the weight
...
}
}
如果这是超过 5000 x 5000 像素的图像,您会期望看到很多开销吗?我试图做一些测试,但我的结果到处都是,因为系统(移动设备)有各种各样的东西在后台运行,可能会扭曲结果。
另一种选择是为每种模式设置一个单独的方法,每个模式都有自己的四个循环。这显然会引入冗余代码,但效率是这里的游戏名称。
提前致谢!
加夫