码迷,mamicode.com
首页 > 移动开发 > 详细

ios 将彩色照片转化成黑白等几种类型

时间:2015-01-21 13:21:07      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:

-(UIImage *)changeColoursImageTograyScaleImage:(UIImage *)anImage type:(int)type

{

    CGImageRef imageRef = anImage.CGImage;

    

    size_t width                   = CGImageGetWidth(imageRef);

    size_t height                  = CGImageGetHeight(imageRef);

    size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef);

    size_t bitsPerPixel           = CGImageGetBitsPerPixel(imageRef);

    size_t bytesPerRow         = CGImageGetBytesPerRow(imageRef);

    

    CGColorSpaceRef colorSpace = CGImageGetColorSpace(imageRef);

    CGBitmapInfo bitMapInfo      = CGImageGetBitmapInfo(imageRef);

    

    bool shouldInterPolate               = CGImageGetShouldInterpolate(imageRef);

    CGColorRenderingIntent intent   = CGImageGetRenderingIntent(imageRef);

    CGDataProviderRef dataProvider = CGImageGetDataProvider(imageRef);

    CFDataRef data                         = CGDataProviderCopyData(dataProvider);

    UInt8 *buffer                            = (UInt8  *)CFDataGetBytePtr(data);

    

    NSInteger x,y;

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

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

            UInt8 *tmp;

            tmp = buffer + y * bytesPerRow + x * 4;

            

            UInt8 red,green,blue;

            red     = *(tmp + 0);

            green = *(tmp + 1);

            blue   = *(tmp + 2);

            

            UInt8 brightness;

            switch (type) {

                case 0:

                    brightness = (77 * red + 28 * green + 151 * blue) / 256;

                    *(tmp + 0) = brightness;

                    *(tmp + 1) = brightness;

                    *(tmp + 1) = brightness;

                    break;

                case 1:

                    brightness = (77 * red + 28 * green + 151 * blue) / 256;

                    *(tmp + 0) = red;

                    *(tmp + 1) = green * 0.7;

                    *(tmp + 1) = blue *0.4;

                    break;

                case 2:

                    brightness = (77 * red + 28 * green + 151 * blue) / 256;

                    *(tmp + 0) = 255 - red;

                    *(tmp + 1) = 255 - green;

                    *(tmp + 1) = 255 - blue;

                    break;

                    

                default:

                    *(tmp + 0) = red;

                    *(tmp + 1) = green;

                    *(tmp + 2) = blue;

                    break;

            }

            

        }

    }

    CFDataRef effectedData = CFDataCreate(NULL, buffer, CFDataGetLength(data));

    CGDataProviderRef effectedDataProvider = CGDataProviderCreateWithCFData(effectedData);

    CGImageRef effectedCGImage = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpace, bitMapInfo, effectedDataProvider, NULL, shouldInterPolate, intent);

    UIImage *effectedImage = [[UIImage alloc]initWithCGImage:effectedCGImage];

    CGImageRelease(effectedCGImage);

    CFRelease(effectedDataProvider);

    CFRelease(effectedData);

    CFRelease(data);

    

    

    return effectedImage;

}

效果图:

技术分享技术分享技术分享

ios 将彩色照片转化成黑白等几种类型

标签:

原文地址:http://www.cnblogs.com/zj901203/p/4238555.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!