我正在为一个小型2D游戏绘制半透明图像叠加在其他图像上。目前,我使用的混合图像公式可以在这里找到:https://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending
我的实现方式如下:
private static int blend(int source, int dest, int trans)
{
double alpha = ((double) trans / 255.0);
int sourceRed = (source >> 16 & 0xff);
int sourceGreen = (source >> 8 & 0xff);
int sourceBlue = (source & 0xff);
int destRed = (dest >> 16 & 0xff);
int destGreen = (dest >> 8 & 0xff);
int destBlue = (dest & 0xff);
int blendedRed = (int) (alpha * sourceRed + (1.0 - alpha) * destRed);
int blendedGreen = (int) (alpha * sourceGreen + (1.0 - alpha) * destGreen);
int blendedBlue = (int) (alpha * sourceBlue + (1.0 - alpha) * destBlue);
return (blendedRed << 16) + (blendedGreen << 8) + blendedBlue;
}
现在它虽然能够正常工作,但由于每个像素每帧都需要调用它,因此开销相当大。相比于不进行混合渲染,我的性能下降了约30%的FPS。
我想知道是否有更好的优化代码的方法,因为我可能做了太多的位运算。