Estoy intentando hacer una operación de fusión alfa de una imagen RGBA (imagen de primer plano), en una imagen RGB (imagen de fondo). Sin embargo, al hacerlo, creo que puedo estar haciendo una operación incorrecta de fusión alfa o hacerlo mal. Por ejemplo, el píxel de mi imagen RGB es de un color grisáceo (127, 127, 127). El píxel de mi imagen RGBA para el píxel será (0, 0, 255). Después de hacer mi operación de mezcla, el color final será (127, 0, 255). Sin embargo, pensé que era más una mezcla aditiva y diferente que la operación que estoy haciendo.Mezcla alfa manual de un píxel RGBA con un píxel RGB
Por cómo se fijan mis valores, echar un vistazo a este
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)
Por qué se establece mis cálculos, echar un vistazo a este
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);
Para los píxeles sin alfa, lo haría me gusta que el valor sea (0, 0, 255) para las imágenes con alfa. Me gustaría que se fundiera. Al final de la operación anterior, será (127, 127, 255). ¿Debo verificar si hay alfa para cada píxel, y si es así, hacer la mezcla o hay otra forma de hacerlo?
que estás haciendo aditivo de mezcla. Considere la mezcla lineal de esta manera: y = (x0 * w) + (x1 * (1-w)) –
Eso es una gran cantidad de 255 escalas hacia adelante y hacia atrás. No debería ser necesario si sus operaciones mantienen la normalización. – fche