mmu*_*phy 21 algorithm image-manipulation alphablending image-processing alpha-transparency
我正在尝试将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)
Run Code Online (Sandbox Code Playgroud)
关于我的计算方法,请看一下
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);
Run Code Online (Sandbox Code Playgroud)
对于没有alpha的像素,我希望该值为(0,0,255),然后对于具有alpha的图像,我希望它能够融入.在上面的操作结束时,它将是(127,127) ,255).我应该检查每个像素是否有alpha,如果有,那么进行混合还是有其他方法可以做到这一点?
use*_*321 25
典型的"Over"混合按以下方式完成:
outputRed = (foregroundRed * foregroundAlpha) + (backgroundRed * (1.0 - foregroundAlpha));
Run Code Online (Sandbox Code Playgroud)
然后重复蓝色和绿色通道.为每个像素执行此操作.