В настоящее время я пытаюсь оптимизировать свой код, чтобы работать немного быстрее. В настоящее время он занимает около + 30 мс для обновления около 3776000 байт. Если я удалю outPx
обновлений внутри моей функции, она будет работать примерно в 3 мс, что означает, что обновления до outPx
- это то, что делает функцию медленнее.Модифицировать данные из массива uint8_t очень медленно?
Любая потенциальная обратная связь о том, как улучшить скорость моей функции ниже, была бы весьма признательна.
uint8_t* outPx = (uint8_t*)out.data;
for (int px=0; px<pxSize; px+=4)
{
newTopAlpha = (alpha*inPx[px+3]);
if (0xff == newTopAlpha)
{
// top is opaque covers entire bottom
// set copy over BGR colors
outPx[px] = inPx[px];
outPx[px+1] = inPx[px+1];
outPx[px+2] = inPx[px+2];
outPx[px+3] = 0xff; //Fully opaque
}
else if (0x00 != newTopAlpha)
{
// top is not completely transparent
topAlpha = newTopAlpha/(float)0xff;
bottomAlpha = outPx[px+3]/(float)0xff;
newAlpha = topAlpha + bottomAlpha*(1-topAlpha);
alphaChange = bottomAlpha*(1-topAlpha);
outPx[px] = (uint8_t)((inPx[px]*topAlpha + outPx[px]*alphaChange)/newAlpha);
outPx[px+1] = (uint8_t)((inPx[px+1]*topAlpha + outPx[px+1]*alphaChange)/newAlpha);
outPx[px+2] = (uint8_t)((inPx[px+2]*topAlpha + outPx[px+2]*alphaChange)/newAlpha);
outPx[px+3] = (uint8_t)(newAlpha*0xff);
}
}
Вы беспокоитесь о 27 миллисекундах ?! – Dave
Также вам нужно помнить, что любой достойный компилятор будет оптимизировать код. Если вы удалите строки 'outPx', это также удалит остальную часть кода и, вероятно, весь цикл, как мертвый код. В том же примечании, самый простой способ ускорить любой код - это установить настройки оптимизации вашего компилятора выше. – Dave
Без обновления 'outPx' функция почти не пишет. Вы уверены, что код не просто оптимизирован? – Angew