手动将RGBA像素与RGB像素进行alpha混合
image-manipulation
image-processing
5
0

我正在尝试对RGB图像(背景图像)进行RGBA图像(前景图像)的alpha混合操作。但是,在这样做的同时,我认为我可能执行了错误的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,如果是,则进行融合,还是有另一种方法?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

您似乎错过了背景(current-PixelColor)的(1-Alpha)乘数

收藏
评论

典型的“过度”混合是通过以下方式完成的:

outputRed = (foregroundRed * foregroundAlpha) + (backgroundRed * (1.0 - foregroundAlpha));

然后重复蓝色和绿色通道。为每个像素执行此操作。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号