美文网首页
iOS图片变灰处理

iOS图片变灰处理

作者: 只身空城谁恋伊人笑 | 来源:发表于2018-06-29 10:53 被阅读0次

    + (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;

    }

    相关文章

      网友评论

          本文标题:iOS图片变灰处理

          本文链接:https://www.haomeiwen.com/subject/hkooyftx.html