微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

算法 – 手动将RGBA像素与RGB像素进行混合

我正在尝试对RGBA图像(前景图像)进行alpha混合操作,到RGB图像(背景图像).但是,在这样做的时候,我想我可能会做错误的alpha混合操作或者做错了.例如,我的RGB图像的像素是(127,127,127)的灰色.像素的RGBA图像像素将为(0,255).完成混合操作后,最后的颜色将为(127,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,255),然后对于我想要混合的alpha的图像.在上面的操作结束时,它将是(127,255).我应该检查每个像素是否有alpha,如果是,那么做混合或还有另一种方法来做到这一点?

解决方法

典型的“Over”混合是通过以下方式完成的:
outputRed = (foregroundRed * foregroundAlpha) + (backgroundRed * (1.0 - foregroundAlpha));

然后重复蓝色和绿色通道.为每个像素做这个.

原文地址:https://www.jb51.cc/css/217064.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。