I did not try running the code, but my thought is: When you use a solid color, the updated values can be written straight to memory without any checks. Once you alpha blend then each pixel will have to be merged with whatever is in the current image. So each pixel goes from a single write to read, calculate, then write. Sure they could have optimized even further and simply not do anything if the alpha channel is 0, but apparently they did not. But you can do this easily yourself -one you have the CellColor you can check if it has a 0 alpha channel and skip setting up the brush and drawing when this is the case.