The other day I was given the task of converting a particularly poorly designed VisualBrush into a LinearGradientBrush. One of the problems I came across very quickly was the use of semi-transparent colors layered on top of each other, and, of course, I needed a “flattened” color for my GradientStop. Now, I could have used Paint.NET or GIMP or Photoshop to put out a couple layers of colors, set the transparencies and used the color dropper to get the result. Of course, since I’m not a designer, I don’t have any of those things installed on my work computer, so I decided to just find the equation to blend the channels myself. It didn’t take long, and Wikipedia delivered the goods. According to [[Alpha_compositing|the article]], the formula to merge two colors, [latex]C_a[/latex] and [latex]C_b[/latex], into some output color, [latex]C_o[/latex], looks like this:
[latex]C_o = C_a\alpha_a+C_b\alpha_b(1-\alpha_a)[/latex]
Since a color can be thought of as a three-tuple of its R, G, and B channels, the formula is easily distributed to each of these values.
At this point, I decided I could probably just pull out a calculator and crunch the numbers. But maybe, in about the same time, I could also whip something together, say in PowerShell, to do it for me. Since I’m still learning PowerShell, I figured the learning experience would be worth at least something. Continue reading “Alpha-Blending Colors in PowerShell”