美文网首页
图片黑白处理

图片黑白处理

作者: Miss_DQ | 来源:发表于2016-10-06 16:44 被阅读60次
    - (UIImage *)grayscaleImageForImage:(UIImage *)image
    {
        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;
    }
    

    通过这个方法可以直接将一张彩色的相片生成黑白照片!github上的demo

    相关文章

      网友评论

          本文标题:图片黑白处理

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