Вот цикл на пиксель. Здесь есть одно умножение в индексе массива,но умножитель аппаратный,думаю замена на двумерный массив проблему не решит.Заремаренная область - рисование частотных меток.Весь этот кусок выполняется за ~10us.
do
{
if (numbit) old = BuferSpectrNew[numbit - 1 + 8 * numcolumn];
else
{
if (numcolumn) old = BuferSpectrNew[7 + 8 * (numcolumn - 1)];
else old = BuferSpectrNew[numbit + 8 * numcolumn];
}
temp = BuferSpectrNew[numbit + 8 * numcolumn];
if (temp > old)
{
if ((numbyte <= temp) && (numbyte > old)) maska |= (1 << numbit);
}
if (temp < old)
{
if ((numbyte < old) && (numbyte >= temp)) maska |= (1 << numbit);
}
if (temp == old)
{
if (numbyte == temp) maska |= (1 << numbit);
}
/* metka = 0;
if (((320*(uint)CodeStart) + ((numbit + 8 * (uint)numcolumn)*(CodeStop-CodeStart)))%200 < (CodeStop-CodeStart)) metka=1;
if (metka == 1)
{
if (PositionVizir == (numbyte - 1)) maska |= (1 << numbit);
if (PositionVizir == (numbyte - 2)) maska |= (1 << numbit);
if (PositionVizir == (numbyte - 3)) maska |= (1 << numbit);
if (PositionVizir == (numbyte - 4)) maska |= (1 << numbit);
if (PositionVizir == (numbyte + 1)) maska |= (1 << numbit);
if (PositionVizir == (numbyte + 2)) maska |= (1 << numbit);
if (PositionVizir == (numbyte + 3)) maska |= (1 << numbit);
if (PositionVizir == (numbyte + 4)) maska |= (1 << numbit);
}
*/ }
while (++numbit < 8);