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

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

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

CGImageRefimageRef;

imageRef = anImage.CGImage;

size_twidth=CGImageGetWidth(imageRef);

size_theight =CGImageGetHeight(imageRef);

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

size_tbitsPerComponent;

bitsPerComponent =CGImageGetBitsPerComponent(imageRef);

// ピクセル全體は何ビットで構(gòu)成されているか

size_tbitsPerPixel;

bitsPerPixel =CGImageGetBitsPerPixel(imageRef);

// 畫像の橫1ライン分のデータが、何バイトで構(gòu)成されているか

size_tbytesPerRow;

bytesPerRow =CGImageGetBytesPerRow(imageRef);

// 畫像の色空間

CGColorSpaceRefcolorSpace;

colorSpace =CGImageGetColorSpace(imageRef);

// 畫像のBitmap情報(bào)

CGBitmapInfobitmapInfo;

bitmapInfo =CGImageGetBitmapInfo(imageRef);

// 畫像がピクセル間の補(bǔ)完をしているか

boolshouldInterpolate;

shouldInterpolate =CGImageGetShouldInterpolate(imageRef);

// 表示裝置によって補(bǔ)正をしているか

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://モノクロ

// 輝度計(jì)算

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;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 陽(yáng)の光 闇の月 陽(yáng)も月も異なれど、同じように地上を照らす。けれど、両者は決してまみえることはない。陽(yáng)が輝くとき月は...
    波沙諾瓦閱讀 2,380評(píng)論 0 7
  • 1.暗闇より夜魔來(lái)たる-1あなたはきっとこんな私をお許しにはならないでしょう…ですが、私はあなたを守る以外の何かを...
    波沙諾瓦閱讀 2,009評(píng)論 1 2
  • 1.暗闇より夜魔來(lái)たる-1あなたはきっとこんな私をお許しにはならないでしょう…ですが、私はあなたを守る以外の何かを...
    波沙諾瓦閱讀 3,413評(píng)論 0 7
  • ——秀水奇石班簡(jiǎn)訊一則 為了鞏固軍訓(xùn)周成果養(yǎng)成孩子良好習(xí)慣,秀水奇石班布置了第二個(gè)周末一份實(shí)...
    火紅的石榴暖暖閱讀 5,039評(píng)論 1 6
  • 最近折騰了Swift的語(yǔ)音錄制識(shí)別和轉(zhuǎn)碼,這塊還是比較坑的,由于語(yǔ)音識(shí)別的準(zhǔn)確度實(shí)測(cè)大概也就80%左右,所以還是需...
    offbye西濤閱讀 1,355評(píng)論 0 5

友情鏈接更多精彩內(nèi)容