我正在尝试对一张RGBA图像(前景图像)进行Alpha混合操作,将其覆盖在一张RGB图像(背景图像)上。然而,在这样做时,我认为我可能正在执行错误的Alpha混合操作或者操作不正确。例如,我的RGB图像像素是灰色的(127, 127, 127),而相应的RGBA图像像素是(0, 0, 255)。在进行混合操作后,最终颜色将会是(127, 0, 255)。但是,我认为这更像是加法混合,与我所做的混合操作不同。
要查看我的值是如何设置的,请看这里
incPixelColor[0] = 0; (red)
incPixelColor[1] = 0; (green)
incPixelColor[2] = 255; (blue)
incPixelColor[3] = 255; (alpha)
currentPixelColor[0] = 127; (red)
currentPixelColor[1] = 127; (green)
currentPixelColor[2] = 127; (blue)
要了解我的计算方式,请看这个
float incAlpha = (currentPixelColor[3]/255.0f);
float red = ((float)incPixelColor[0]/255.0f * incAlpha) + ((float)currentPixelColor[0]/255.0f);
float green = ((float)incPixelColor[1]/255.0f * incAlpha) + ((float)currentPixelColor[1]/255.0f);
float blue = ((float)incPixelColor[2]/255.0f * incAlpha) + ((float)currentPixelColor[2]/255.0f);
currentPixelColor[0] = min(red * 255, 255.0f);
currentPixelColor[1] = min(green * 255, 255.0f);
currentPixelColor[2] = min(blue * 255, 255.0f);
对于没有 alpha 通道的像素,我希望值为 (0, 0, 255),对于有 alpha 的图像,我希望它能混合。在上述操作结束时,它将为 (127, 127, 255)。我应该检查每个像素是否有 alpha 通道,并且如果有,那么进行混合,还是有其他方法可以做到这一点?