iOS之圖片濾鏡

利用CoreGraphics庫(kù)制作濾鏡,效果如下:

濾鏡

代碼

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UIImage *image = [UIImage imageNamed:@"IMG_1408.JPG"];
    unsigned char *data = [self convertUIImageToData:image];
    data = [self grayImageWithData:data originalImage:image];
    self.imageViewGray.image = [self convertDataToUIImage:data image:image];
    
}

#pragma mark - 將UIImage轉(zhuǎn)化為像素?cái)?shù)據(jù)
- (unsigned char *)convertUIImageToData:(UIImage *)image{
    CGSize size = image.size;

    void *data = malloc(size.width * size.height * 4);
    
    CGImageRef imageRef = [image CGImage];
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();//RGBA
    CGContextRef contextRef = CGBitmapContextCreate(data, size.width, size.height, 8, 4 * size.width, colorSpaceRef, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
    CGContextDrawImage(contextRef, CGRectMake(0, 0, size.width, size.height), imageRef);
    
    //mrc
    CGColorSpaceRelease(colorSpaceRef);
    CGContextRelease(contextRef);
    
    return (unsigned char *)data;
}

#pragma mark - 對(duì)像素進(jìn)行灰度處理
- (unsigned char *)grayImageWithData:(unsigned char *)imageData originalImage:(UIImage *)originalImage{
    CGFloat width = originalImage.size.width;
    CGFloat height = originalImage.size.height;
    unsigned char *resultData = malloc(width * height * sizeof(unsigned char) * 4);
    
    memset(resultData, 0, sizeof(unsigned char) * 4);
    
    for (int h = 0; h < height; h++) {
        for (int w = 0; w < width; w++) {
            unsigned int imageIndex = h*width + w;
            
            unsigned char bitMapRed = *(imageData + imageIndex*4);
            unsigned char bitMapGreen = *(imageData + imageIndex*4 + 1);
            unsigned char bitMapBlue = *(imageData + imageIndex*4 + 2);

            int bitMap = bitMapRed * 77 / 255 + bitMapGreen * 151 / 255 + bitMapBlue * 88 / 255;
            unsigned char newBitMap = (bitMap > 255) ? 255 : bitMap;
            memset(resultData + imageIndex*4, newBitMap, 1);
            memset(resultData + imageIndex*4 + 1, newBitMap, 1);
            memset(resultData + imageIndex*4 + 2, newBitMap, 1);

        }
    }
    
    return resultData;
}

#pragma mark - 對(duì)像素進(jìn)行顏色反轉(zhuǎn)處理
- (unsigned char *)reColorImageWithData:(unsigned char *)imageData originalImage:(UIImage *)originalImage{
    CGFloat width = originalImage.size.width;
    CGFloat height = originalImage.size.height;
    unsigned char *resultData = malloc(width * height * sizeof(unsigned char) * 4);
    
    memset(resultData, 0, sizeof(unsigned char) * 4);
    
    for (int h = 0; h < height; h++) {
        for (int w = 0; w < width; w++) {
            unsigned int imageIndex = h*width + w;
            
            unsigned char bitMapRed = *(imageData + imageIndex*4);
            unsigned char bitMapGreen = *(imageData + imageIndex*4 + 1);
            unsigned char bitMapBlue = *(imageData + imageIndex*4 + 2);
            unsigned char bitMapRedRe = 255 - bitMapRed;
            unsigned char bitMapGreenRe = 255 - bitMapGreen;
            unsigned char bitMapBlueRe = 255 - bitMapBlue;

            memset(resultData + imageIndex*4, bitMapRedRe, 1);
            memset(resultData + imageIndex*4 + 1, bitMapGreenRe, 1);
            memset(resultData + imageIndex*4 + 2, bitMapBlueRe, 1);
            
        }
    }
    
    return resultData;
}

#pragma mark - 將像素?cái)?shù)據(jù)轉(zhuǎn)化為UIImage
- (UIImage *)convertDataToUIImage:(unsigned char *)imageData image:(UIImage *)imageSource{
    CGFloat width = imageSource.size.width;
    CGFloat height = imageSource.size.height;
    CGFloat dataLength = width * height * 4;
    
    CGDataProviderRef dataProviderRef = CGDataProviderCreateWithData(NULL, imageData, dataLength, NULL);
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
    
    CGImageRef imageRef = CGImageCreate(width, height, 8, 32, 4*width, colorSpaceRef, kCGBitmapByteOrderDefault, dataProviderRef, NULL, NO, kCGRenderingIntentDefault);
    UIImage *image = [UIImage imageWithCGImage:imageRef];
    
    //mrc
    CGImageRelease(imageRef);
    CGDataProviderRelease(dataProviderRef);
    CGColorSpaceRelease(colorSpaceRef);
    
    return image;
}

上一篇:git筆記
下一篇:iOS之多線(xiàn)程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市糯累,隨后出現(xiàn)的幾起案子泳姐,更是在濱河造成了極大的恐慌胖秒,老刑警劉巖慕的,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件风题,死亡現(xiàn)場(chǎng)離奇詭異沛硅,居然都是意外死亡摇肌,警方通過(guò)查閱死者的電腦和手機(jī)朦蕴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)吩抓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)疹娶,“玉大人雨饺,你說(shuō)我怎么就攤上這事额港∫普叮” “怎么了向瓷?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵猖任,是天一觀(guān)的道長(zhǎng)朱躺。 經(jīng)常有香客問(wèn)我室琢,道長(zhǎng)盈滴,這世上最難降的妖魔是什么巢钓? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任硫朦,我火速辦了婚禮背镇,結(jié)果婚禮上瞒斩,老公的妹妹穿的比我還像新娘胸囱。我一直安慰自己烹笔,他們只是感情好谤职,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布哟忍。 她就那樣靜靜地躺著锅很,像睡著了一般爆安。 火紅的嫁衣襯著肌膚如雪仔引。 梳的紋絲不亂的頭發(fā)上咖耘,一...
    開(kāi)封第一講書(shū)人閱讀 52,246評(píng)論 1 308
  • 那天版保,我揣著相機(jī)與錄音彻犁,去河邊找鬼汞幢。 笑死森篷,一個(gè)胖子當(dāng)著我的面吹牛仲智,可吹牛的內(nèi)容都是我干的坎藐。 我是一名探鬼主播岩馍,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蛀恩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼双谆!你這毒婦竟也來(lái)了顽馋?” 一聲冷哼從身側(cè)響起寸谜,我...
    開(kāi)封第一講書(shū)人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤他爸,失蹤者是張志新(化名)和其女友劉穎诊笤,沒(méi)想到半個(gè)月后讨跟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體许赃,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咳胃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片展懈。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖睡毒,靈堂內(nèi)的尸體忽然破棺而出演顾,到底是詐尸還是另有隱情钠至,我是刑警寧澤棉钧,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布摄悯,位于F島的核電站奢驯,受9級(jí)特大地震影響瘪阁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜义黎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狐蜕。 院中可真熱鬧层释,春花似錦贡羔、人聲如沸乖寒。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)痊班。三九已至涤伐,卻和暖如春凝果,著一層夾襖步出監(jiān)牢的瞬間器净,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工当凡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留山害,地道東北人纠俭。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像浪慌,于是被迫代替她去往敵國(guó)和親冤荆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容