I have three CGLayers who’s data I’d like to compare.
void *a = CGBitmapContextGetData(CGLayerGetContext(layerA));
void *b = CGBitmapContextGetData(CGLayerGetContext(layerB));
void *c = CGBitmapContextGetData(CGLayerGetContext(layerC));
I’d like to get a result like ((a OR b) AND c) where only bits that are on in layerA or layerB and also on in layerC end up in the result. These layers are kCGImageAlphaOnly so they are only 8 bits “deep”, and I’ve only drawn into them with 1.0 alpha. I also don’t need to know where the overlap lies, I just need to know whether there are any bits on in the result.
I’m really missing QuickDraw today, it had plenty of bit-oriented operations that were very speedy. Any thoughts on how to accomplish something like this?
Here’s a naive implementation, assuming all three are the same size:
Since you’re hankering for QuickDraw, I assume you could have written that yourself, and you know that will probably be slow.
If you can guarantee the bitmap sizes, you could use
intinstead ofcharand operate on four bytes at a time.For more serious optimization, you should check out the Accelerate framework.