今天要修改银行卡 防微信形式的 有一个坑呀 

 

这还是改过的 只是获取背景颜色就是个坑  没办法 还好网上找到一个博主姐姐写的 代码 

//根据图片获取图片的主色调

-(UIColor*)mostColor:(UIImage*)image{

    

#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1

    int bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast;

#else

    int bitmapInfo = kCGImageAlphaPremultipliedLast;

#endif

    //第一步 先把图片缩小 加快计算速度. 但越小结果误差可能越大

    CGSize thumbSize=CGSizeMake(image.size.width/2,image.size.height/2);

    

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

    CGContextRef context = CGBitmapContextCreate(NULL,

                                                 thumbSize.width,

                                                 thumbSize.height,

                                                 8,//bits per component

                                                 thumbSize.width*4,

                                                 colorSpace,

                                                 bitmapInfo);

    

    CGRect drawRect = CGRectMake(0, 0, thumbSize.width/2, thumbSize.height/2);

    CGContextDrawImage(context, drawRect, image.CGImage);

    CGColorSpaceRelease(colorSpace);

    

    //第二步 取每个点的像素值

    unsigned char* data = CGBitmapContextGetData (context);

    if (data == NULL) return nil;

    NSCountedSet *cls=[NSCountedSet setWithCapacity:thumbSize.width*thumbSize.height];

    

    for (int x=0; x<thumbSize.width; x++) {

        for (int y=0; y<thumbSize.height; y++) {

            int offset = 4*(x*y);

            int red = data[offset];

            int green = data[offset+1];

            int blue = data[offset+2];

            int alpha =  data[offset+3];

            if (alpha>0) {//去除透明

                if (red==255&&green==255&&blue==255) {//去除白色

                }else{

                    NSArray *clr=@[@(red),@(green),@(blue),@(alpha)];

                    [cls addObject:clr];

                }

                

            }

        }

    }

    CGContextRelease(context);

    //第三步 找到出现次数最多的那个颜色

    NSEnumerator *enumerator = [cls objectEnumerator];

    NSArray *curColor = nil;

    NSArray *MaxColor=nil;

    NSUInteger MaxCount=0;

    while ( (curColor = [enumerator nextObject]) != nil )

    {

        NSUInteger tmpCount = [cls countForObject:curColor];

        if ( tmpCount < MaxCount ) continue;

        MaxCount=tmpCount;

        MaxColor=curColor;

        

    }

    return [UIColor colorWithRed:([MaxColor[0] intValue]/255.0f) green:([MaxColor[1] intValue]/255.0f) blue:([MaxColor[2] intValue]/255.0f) alpha:([MaxColor[3] intValue]/255.0f)];

}

 找到代码 就好一些了  在要实现的cell.h 里

-(UIColor*)mostColor:(UIImage*)image;

cell.m中 把代码复制上去 

 

在VC里

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    LZSelectBanTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];

    cell.selectionStyle = UITableViewCellSelectionStyleNone;

   LZSelectBanModel * model =[LZSelectBanModel mj_objectWithKeyValues:_cardArr[indexPath.row]];

    [cell.iconImaView sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",QYBM_API_URL,model.bl_pic]]placeholderImage:[UIImage imageNamed:@"默认"]];

    

    UIColor *c = [cell mostColor:cell.iconImaView.image];

    cell.backView.backgroundColor = c;

    

    cell.nameLbl.text =model.bl_name;

    cell.titleLbl.text =model.bc_bank_num;

    NSString *str = [model.bc_bank_num substringFromIndex:model.bc_bank_num.length -4];

    

    

    cell.titleLbl.font = [UIFont systemFontOfSize:24];

    cell.titleLbl.text = [NSString stringWithFormat:@"**** **** **** %@",str]; 

    return cell;

}

 这样就获取到了 这里又一个坑  第一次运行 是不出效果的  毕竟是菜鸟 找原因把  改被人的代码就这样 慢慢找

原来是这个里Image是用sdwebImage异步获取的, 是在另一个线程里网络请求的, 这样第一次运行 是获取不到图片的

 

把里面的获取图片的 改成 先获取到图片 在获取颜色

   [cell.iconImaView sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",QYBM_API_URL,model.bl_pic]]placeholderImage:[UIImage imageNamed:@"默认"]];

改成

 [cell.iconImaView sd_setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@",QYBM_API_URL,model.bl_pic]] placeholderImage:[UIImage imageNamed:@"默认"] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {

        UIColor *c = [cell mostColor:cell.iconImaView.image];

        cell.backView.backgroundColor = c;       

    }];

  再运行,

有的 运行 会出先错误  

 我就把代码 修改了一下

    //第一步 先把图片缩小 加快计算速度. 但越小结果误差可能越大

    CGSize thumbSize=CGSizeMake(image.size.width/2,image.size.height/2);

在这里我吧make 写死了  你获取的图片是多大 就写多大吧 

CGSize thumbSize=CGSizeMake(40,40);

 if (red==255&&green==255&&blue==255) 这里 

我改成了

if (red<=240&&green<=240&&blue<=240)

再运行