我目前正在尝试优化我的代码以提高运行速度。目前,更新大约 3776000 字节大约需要 +30 毫秒。如果我在我的函数中删除 outPx
更新,它会以大约 3 毫秒的速度运行,这意味着对 outPx
的更新会使函数变慢。
对于如何提高下面我的功能的速度的任何潜在反馈将不胜感激。
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);
}
}
最佳答案
uint8_t
是一个精确宽度 整数类型,这意味着您要求编译器为您的类型分配恰好那么多的内存。如果您的系统有对齐要求,这可能会导致代码运行速度变慢。
将 uint8_t
更改为 uint_fast8_t
。这会告诉编译器您希望此变量尽可能为 8 位,但如果可以使代码更快,则可以使用更大的大小。
除此之外,还有很多事情可能会导致性能不佳,在这种情况下,您需要说明您使用的是什么系统和编译器。
关于c++ - 从 uint8_t 数组修改数据很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16397098/