Number of alpha pixels in CGContext

寵の児 提交于 2019-12-01 12:56:23

问题


I have a masking CGContext with 2 types of pixels: color and alpha (opaque and transparent pixels). How to calculate percentage of alpha pixels in my context?


回答1:


I didn't test it, but this should do the trick - just pass ReportAlphaPercent a CGImageRef:

UIImage *foo; //The image you want to analyze
float alphaPercent = ReportAlphaPercent(foo.CGImage);


float ReportAlphaPercent(CGImageRef imgRef)
{
    size_t w = CGImageGetWidth(imgRef);
    size_t h = CGImageGetHeight(imgRef);

    unsigned char *inImage = malloc(w * h * 4);
    memset(inImage, 0, (h * w * 4));

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(inImage, w, h, 8, w * 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
    CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
    CGContextSetShouldAntialias(context, NO);
    CGContextDrawImage(context, CGRectMake(0, 0, w, h), imgRef);

    int byteIndex = 0;

    int alphaCount = 0;

    for(int i = 0; i < (w * h); i++) {

        if (inImage[byteIndex + 3]) { // if the alpha value is not 0, count it
            alphaCount++;
        }

        byteIndex += 4;
    }

    free(inImage);

    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);

    return (float) alphaCount / (w * h);
}


来源:https://stackoverflow.com/questions/8992522/number-of-alpha-pixels-in-cgcontext

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!