Próbuję wykonać operację mieszania alfa obrazu RGBA (obraz pierwszego planu) na obrazie RGB (obraz w tle). Jednak robiąc to, myślę, że mogę wykonać niewłaściwą operację mieszania alfa lub zrobić to źle. Na przykład piksel mojego obrazu RGB ma szarawy kolor (127, 127, 127). Piksel mojego obrazu RGBA dla piksela będzie wynosił (0, 0, 255). Po wykonaniu operacji mieszania ostateczny kolor będzie (127, 0, 255). Jednak myślałem, że to bardziej mieszanka dodatków i różni się od operacji, którą wykonuję.Ręczne mieszanie alfa piksela RGBA z pikselem RGB
Na jak moje wartości są ustawione, przyjrzeć się tej
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)
na jak moje obliczenia są ustawione, przyjrzeć się tej
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);
pikseli bez kanału alfa, chciałbym na przykład dla wartości (0, 0, 255), a następnie dla obrazów z alfą chciałbym, aby się wtopiła. Pod koniec powyższej operacji będzie to (127, 127, 255). Czy powinienem sprawdzić, czy istnieje alfa dla każdego piksela, a jeśli tak, to czy jest to mieszanka, czy jest inny sposób na zrobienie tego?
Robisz addytywne mieszanie. Rozważmy liniowe mieszanie w następujący sposób: y = (x0 * w) + (x1 * (1-w)) –
To dużo 255 skalowania w przód iw tył. Nie powinno być konieczne, jeśli twoje operacje utrzymują normalizację. – fche