Tôi đang cố gắng thực hiện thao tác trộn alpha của hình ảnh RGBA (hình nền trước), trên hình ảnh RGB (hình nền). Tuy nhiên, trong khi làm như vậy tôi nghĩ rằng tôi có thể làm việc trộn alpha sai hoặc làm sai. Ví dụ: pixel của hình ảnh RGB của tôi có màu xám (127, 127, 127). Pixel của hình ảnh RGBA của tôi cho pixel sẽ là (0, 0, 255). Sau khi tôi thực hiện thao tác trộn, màu cuối cùng sẽ là (127, 0, 255). Tuy nhiên, tôi nghĩ rằng đó là một sự pha trộn phụ gia và khác với hoạt động tôi đang làm.Trộn alpha theo cách thủ công pixel RGBA với pixel RGB
bao giá trị của tôi được thiết lập, hãy xem này
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)
Đối với cách tính toán của tôi được thiết lập, hãy xem này
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);
Đối với pixel không có alpha, tôi sẽ như cho giá trị được (0, 0, 255) sau đó cho hình ảnh với alpha tôi muốn cho nó để pha trộn. Vào cuối của hoạt động trên, nó sẽ là (127, 127, 255). Tôi có nên kiểm tra xem liệu có alpha cho mỗi điểm ảnh hay không và nếu có thì hãy trộn hay có cách nào khác để làm điều này không?
Bạn đang pha trộn phụ gia. Hãy xem xét trộn tuyến tính như thế này: y = (x0 * w) + (x1 * (1-w)) –
Đó là rất nhiều 255 quy mô qua lại. Nó không phải là cần thiết nếu hoạt động của bạn duy trì bình thường. – fche