zoukankan      html  css  js  c++  java
  • ios 将彩色照片转化成黑白等几种类型

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

    }

    效果图:

    握不住的沙,干脆扬了它。
  • 相关阅读:
    路由器远程登陆的方式
    路由器上的DNS服务器构建
    路由器配置维护技巧---管道的应用
    【转】常见面试问题
    英文面试决胜关键
    12个有趣的c语言面试题
    16道嵌入式C语言面试题(经典)
    LCD 调试总结
    关于uboot的一些优化
    linux驱动开发的经典书籍
  • 原文地址:https://www.cnblogs.com/zj901203/p/4238555.html
Copyright © 2011-2022 走看看