Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting ARBG to RGB with alpha blending

Tags:

Let's say that we have an ARGB color:

Color argb = Color.FromARGB(127, 69, 12, 255); //Light Urple. 

When this is painted on top of an existing color, the colors will blend. So when it is blended with white, the resulting color is Color.FromARGB(255, 162, 133, 255);

The solution should work like this:

Color blend = Color.White;  Color argb = Color.FromARGB(127, 69, 12, 255); //Light Urple.       Color rgb = ToRGB(argb, blend); //Same as Color.FromARGB(255, 162, 133, 255); 

What is ToRGB's implementation?

like image 926
Bob Avatar asked Aug 05 '08 20:08

Bob


1 Answers

It's called alpha blending.

In psuedocode, assuming the background color (blend) always has 255 alpha. Also assumes alpha is 0-255.

alpha=argb.alpha() r = (alpha/255)*argb.r() + (1 - alpha/255)*blend.r() g = (alpha/255)*argb.g() + (1 - alpha/255)*blend.g() b = (alpha/255)*argb.b() + (1 - alpha/255)*blend.b() 

note: you probably need to be a bit (more) careful about floating-point/int math and rounding issues, depending on language. Cast intermediates accordingly

Edited to add:

If you don't have a background color with an alpha of 255, the algebra gets alot more complicated. I've done it before and it's a fun exercise left to the reader (if you really need to know, ask another question :).

In other words, what color C blends into some background the same as blending A, then blending B. This is sort of like calculating A+B (which isn't the same as B+A).

like image 55
Louis Brandy Avatar answered Nov 09 '22 21:11

Louis Brandy