今天要修改银行卡 防微信形式的 有一个坑呀
这还是改过的 只是获取背景颜色就是个坑 没办法 还好网上找到一个博主姐姐写的 代码
//根据图片获取图片的主色调
-(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)
再运行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了