Laden Sie ein 32-Bit-Bild in einen Puffer und ich multipremiere dann die Farbwerte mit dem entsprechenden Alpha zum Mischen.Multiplizieren von Bild Alpha effizient
Das Folgende funktioniert, aber ich frage mich, ob es eine effizientere Möglichkeit gibt, dies zu tun, auch wenn es nur zu einer guten Approximation führt?
Bilddaten ist ein Zeiger dieses Typs:
typedef struct rgba_pixel
{
uint8_t r;
uint8_t g;
uint8_t b;
uint8_t a;
} rgba_pixel;
rgba_pixel * image_data;
for (i = 0; i < length; i++)
{
if (image_data[i].a == 0)
image_data[i].r = image_data[i].g = image_data[i].b = 0;
else if (image_data[i].a < 255)
{
alpha_factor = image_data[i].a/255.0;
image_data[i].r = image_data[i].r * alpha_factor;
image_data[i].g = image_data[i].g * alpha_factor;
image_data[i].b = image_data[i].b * alpha_factor;
}
}
Können Sie die Definition der Typen image_data und alpha_factor anzeigen? –
zur Definition hinzugefügt, alpha_factor ist ein Double. – phenompbg