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

    }

    效果图:

    握不住的沙,干脆扬了它。
  • 相关阅读:
    CSUSTOJ-伊井野弥子是风纪委员(简单BFS)
    CSUSTOJ-石上优不想留级(一维坐标三分及思维解法)
    CSUSTOJ-哈希的纸团(mid思维)
    CSUSTOJ-辉夜大小姐想被猜中(简单暴力)
    CSUSTOJ-藤原书记想要探病(简单矩阵快速幂)
    CSUSTOJ-石上优想要逃离(STL+思维暴力)
    CSUSTOJ-白银御行想展示(思维题)
    CSUSTOJ-藤原书记的佩斯(简单数学)
    CSUSTOJ-白银探病篇(简单思维)
    Odoo发邮件被服务器退回
  • 原文地址:https://www.cnblogs.com/zj901203/p/4238555.html
Copyright © 2020-2023  润新知