美文网首页
生成灰色,棕色,反色图片

生成灰色,棕色,反色图片

作者: alohasingle | 来源:发表于2016-12-09 15:11 被阅读0次

    //生成灰色,棕色,反色图片1灰,2棕,3反

    - (UIImage*) grayscale:(UIImage*)anImage type:(char)type {

    CGImageRefimageRef;

    imageRef = anImage.CGImage;

    size_twidth=CGImageGetWidth(imageRef);

    size_theight =CGImageGetHeight(imageRef);

    // ピクセルを構成するRGB各要素が何ビットで構成されている

    size_tbitsPerComponent;

    bitsPerComponent =CGImageGetBitsPerComponent(imageRef);

    // ピクセル全体は何ビットで構成されているか

    size_tbitsPerPixel;

    bitsPerPixel =CGImageGetBitsPerPixel(imageRef);

    // 画像の横1ライン分のデータが、何バイトで構成されているか

    size_tbytesPerRow;

    bytesPerRow =CGImageGetBytesPerRow(imageRef);

    // 画像の色空間

    CGColorSpaceRefcolorSpace;

    colorSpace =CGImageGetColorSpace(imageRef);

    // 画像のBitmap情報

    CGBitmapInfobitmapInfo;

    bitmapInfo =CGImageGetBitmapInfo(imageRef);

    // 画像がピクセル間の補完をしているか

    boolshouldInterpolate;

    shouldInterpolate =CGImageGetShouldInterpolate(imageRef);

    // 表示装置によって補正をしているか

    CGColorRenderingIntentintent;

    intent =CGImageGetRenderingIntent(imageRef);

    // 画像のデータプロバイダを取得する

    CGDataProviderRefdataProvider;

    dataProvider =CGImageGetDataProvider(imageRef);

    // データプロバイダから画像のbitmap生データ取得

    CFDataRefdata;

    UInt8*buffer;

    data =CGDataProviderCopyData(dataProvider);

    buffer = (UInt8*)CFDataGetBytePtr(data);

    // 1ピクセルずつ画像を処理

    NSUIntegerx, y;

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

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

    UInt8*tmp;

    tmp = buffer + y * bytesPerRow + x *4;// RGBAの4つ値をもっているので、1ピクセルごとに*4してずらす

    // RGB値を取得

    UInt8red,green,blue;

    red = *(tmp +0);

    green = *(tmp +1);

    blue = *(tmp +2);

    UInt8brightness;

    switch(type) {

    case1://モノクロ

    // 輝度計算

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

    *(tmp +0) = brightness;

    *(tmp +1) = brightness;

    *(tmp +2) = brightness;

    break;

    case2://セピア

    *(tmp +0) = red;

    *(tmp +1) = green *0.7;

    *(tmp +2) = blue *0.4;

    break;

    case3://色反転

    *(tmp +0) =255- red;

    *(tmp +1) =255- green;

    *(tmp +2) =255- blue;

    break;

    default:

    *(tmp +0) = red;

    *(tmp +1) = green;

    *(tmp +2) = blue;

    break;

    }

    }

    }

    // 効果を与えたデータ生成

    CFDataRefeffectedData;

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

    // 効果を与えたデータプロバイダを生成

    CGDataProviderRefeffectedDataProvider;

    effectedDataProvider =CGDataProviderCreateWithCFData(effectedData);

    // 画像を生成

    CGImageRefeffectedCgImage;

    UIImage*effectedImage;

    effectedCgImage =CGImageCreate(

    width, height,

    bitsPerComponent, bitsPerPixel, bytesPerRow,

    colorSpace, bitmapInfo, effectedDataProvider,

    NULL, shouldInterpolate, intent);

    effectedImage = [[UIImagealloc]initWithCGImage:effectedCgImage];

    // データの解放

    CGImageRelease(effectedCgImage);

    CFRelease(effectedDataProvider);

    CFRelease(effectedData);

    CFRelease(data);

    returneffectedImage;

    }

    相关文章

      网友评论

          本文标题:生成灰色,棕色,反色图片

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