iOS图片变灰处理

+ (UIImage*)grayscaleImageForImage:(UIImage*)image {

    // Adapted from this thread: http://stackoverflow.com/questions/1298867/convert-image-to-grayscale

    const int RED =1;

    const int GREEN =2;

    const int BLUE =3;


    // Create image rectangle with current image width/height

    CGRect imageRect = CGRectMake(0,0, image.size.width* image.scale, image.size.height* image.scale);


    int width = imageRect.size.width;

    int height = imageRect.size.height;


    // the pixels will be painted to this array

    uint32_t *pixels = (uint32_t*) malloc(width * height *sizeof(uint32_t));


    // clear the pixels so any transparency is preserved

    memset(pixels,0, width * height *sizeof(uint32_t));


    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();


    // create a context with RGBA pixels

    CGContextRef context = CGBitmapContextCreate(pixels, width, height,8, width *sizeof(uint32_t), colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedLast);


    // paint the bitmap to our context which will fill in the pixels array

    CGContextDrawImage(context,CGRectMake(0,0, width, height), [image CGImage]);


    for(int y = 0; y < height; y++) {

        for(int x = 0; x < width; x++) {

            uint8_t *rgbaPixel = (uint8_t*) &pixels[y * width + x];


            // convert to grayscale using recommended method: http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale

            uint32_t gray = 0.3 * rgbaPixel[RED] +0.59 * rgbaPixel[GREEN] +0.11 * rgbaPixel[BLUE];


            // set the pixels to gray

            rgbaPixel[RED] = gray;

            rgbaPixel[GREEN] = gray;

            rgbaPixel[BLUE] = gray;

        }

    }


    // create a new CGImageRef from our context with the modified pixels

    CGImageRef imageRef = CGBitmapContextCreateImage(context);


    // we're done with the context, color space, and pixels

    CGContextRelease(context);

    CGColorSpaceRelease(colorSpace);

    free(pixels);


    // make a new UIImage to return

    UIImage *resultUIImage = [UIImage imageWithCGImage:imageRef scale:image.scale orientation:UIImageOrientationUp];


    // we're done with image now too

    CGImageRelease(imageRef);


    return resultUIImage;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容