从UIImage中删除Alpha通道

我使用以下方法从文件系统中获取解压缩的uiimage。 但是,当打开颜色混合图层时,即使将UIImageView设置为“不透明”,UIImageView也会显示为红色。

文件系统上的图像没有alpha通道。 我试过设置CGContextSetAlpha(bitmapContext,1),但仍然有混合层。

任何人都知道如何使用CGContextDrawImage删除alpha通道?

- (UIImage *)decompressedImage { CGImageRef imageRef = self.CGImage; CGRect rect = CGRectMake(0.f, 0.f, CGImageGetWidth(imageRef), CGImageGetHeight(imageRef)); CGContextRef bitmapContext = CGBitmapContextCreate(NULL, rect.size.width, rect.size.height, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), CGImageGetColorSpace(imageRef), kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little ); // kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little are the bit flags required // so that the main thread doesn't have any conversions to do. CGContextDrawImage(bitmapContext, rect, imageRef); CGImageRef decompressedImageRef = CGBitmapContextCreateImage(bitmapContext); UIImage* decompressedImage = [UIImage imageWithCGImage:decompressedImageRef scale:[[UIScreen mainScreen] scale] orientation:UIImageOrientationUp]; CGImageRelease(decompressedImageRef); CGContextRelease(bitmapContext); return decompressedImage; } 

在上下文的选项中,请尝试选项

 kCGImageAlphaNoneSkipLast 

要么

 kCGImageAlphaNoneSkipFirst 

取决于您是否使用RGBA或ARGB

 CGContextRef bitmapContext = CGBitmapContextCreate(NULL, rect.size.width, rect.size.height, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), CGImageGetColorSpace(imageRef), kCGImageAlphaNoneSkipLast | kCGBitmapByteOrder32Little ); 
 -(void)JhagRemoveMethodRepet { switch (Jhagtag) { case 1: { if (jhag1.alpha>0.3) { float alpha1; alpha1=jhag1.alpha; jhag1.alpha=alpha1-0.1; [Checkjhag replaceObjectAtIndex:0 withObject:@"Mid"]; }else { jhag1.alpha=0.0; [JRemovetimer invalidate]; JRemovetimer=nil; [Checkjhag replaceObjectAtIndex:0 withObject:@"No"]; [self checkcompeletewater]; } } break; case 2: { if (jhag2.alpha>0.3) { float alpha1; alpha1=jhag2.alpha; jhag2.alpha=alpha1-0.1; [Checkjhag replaceObjectAtIndex:1 withObject:@"Mid"]; if (jhagBrush==YES) { BTooth2.alpha=0.0; } }else { jhag2.alpha=0.0; [JRemovetimer invalidate]; JRemovetimer=nil; [Checkjhag replaceObjectAtIndex:1 withObject:@"No"]; [self checkcompeletewater]; } } break; case 3: { if (jhag3.alpha>0.3) { float alpha1; alpha1=jhag3.alpha; jhag3.alpha=alpha1-0.1; [Checkjhag replaceObjectAtIndex:2 withObject:@"Mid"]; }else { jhag3.alpha=0.0; [JRemovetimer invalidate]; JRemovetimer=nil; [Checkjhag replaceObjectAtIndex:2 withObject:@"No"]; [self checkcompeletewater]; } } break; case 4: { if (jhag4.alpha>0.3) { float alpha1; alpha1=jhag4.alpha; jhag4.alpha=alpha1-0.1; [Checkjhag replaceObjectAtIndex:3 withObject:@"Mid"]; if (jhagBrush==YES) { BTooth3.alpha=0.0; SpiderMud.alpha=0.0; } }else { jhag4.alpha=0.0; [JRemovetimer invalidate]; JRemovetimer=nil; [Checkjhag replaceObjectAtIndex:3 withObject:@"No"]; [self checkcompeletewater]; } } break; case 5: { if (jhag5.alpha>0.3) { float alpha1; alpha1=jhag5.alpha; jhag5.alpha=alpha1-0.1; [Checkjhag replaceObjectAtIndex:4 withObject:@"Mid"]; }else { jhag5.alpha=0.0; [JRemovetimer invalidate]; JRemovetimer=nil; [Checkjhag replaceObjectAtIndex:4 withObject:@"No"]; [self checkcompeletewater]; } } break; case 6: { if (jhag6.alpha>0.3) { float alpha1; alpha1=jhag6.alpha; jhag6.alpha=alpha1-0.1; [Checkjhag replaceObjectAtIndex:5 withObject:@"Mid"]; if (jhagBrush==YES) { GreenMud.alpha=0.0; } }else { jhag6.alpha=0.0; [JRemovetimer invalidate]; JRemovetimer=nil; [Checkjhag replaceObjectAtIndex:5 withObject:@"No"]; [self checkcompeletewater]; } } break; case 7: { if (jhag7.alpha>0.3) { float alpha1; alpha1=jhag7.alpha; jhag7.alpha=alpha1-0.1; [Checkjhag replaceObjectAtIndex:6 withObject:@"Mid"]; }else { jhag7.alpha=0.0; [JRemovetimer invalidate]; JRemovetimer=nil; [Checkjhag replaceObjectAtIndex:6 withObject:@"No"]; [self checkcompeletewater]; } } break; case 8: { if (jhag8.alpha>0.3) { float alpha1; alpha1=jhag8.alpha; jhag8.alpha=alpha1-0.1; [Checkjhag replaceObjectAtIndex:7 withObject:@"Mid"]; if (jhagBrush==YES) { BTooth1.alpha=0.0; } }else { jhag8.alpha=0.0; [JRemovetimer invalidate]; JRemovetimer=nil; [Checkjhag replaceObjectAtIndex:7 withObject:@"No"]; [self checkcompeletewater]; } } break; case 9: { if (jhag9.alpha>0.3) { float alpha1; alpha1=jhag9.alpha; jhag9.alpha=alpha1-0.1; [Checkjhag replaceObjectAtIndex:8 withObject:@"Mid"]; } else { jhag9.alpha=0.0; [JRemovetimer invalidate]; JRemovetimer=nil; [Checkjhag replaceObjectAtIndex:8 withObject:@"No"]; [self checkcompeletewater]; } } break; case 10: { if (jhag10.alpha>0.3) { float alpha1; alpha1=jhag10.alpha; jhag10.alpha=alpha1-0.1; [Checkjhag replaceObjectAtIndex:9 withObject:@"Mid"]; }else { jhag10.alpha=0.0; [JRemovetimer invalidate]; JRemovetimer=nil; [Checkjhag replaceObjectAtIndex:9 withObject:@"No"]; [self checkcompeletewater]; } } break; case 11: { if (jhag11.alpha>0.3) { float alpha1; alpha1=jhag11.alpha; jhag11.alpha=alpha1-0.1; [Checkjhag replaceObjectAtIndex:10 withObject:@"Mid"]; if (jhagBrush==YES) { Yellowmud.alpha=0.0; } }else { jhag11.alpha=0.0; [JRemovetimer invalidate]; JRemovetimer=nil; [Checkjhag replaceObjectAtIndex:10 withObject:@"No"]; [self checkcompeletewater]; } } break; default: break; } } -(void)checkcompeletewater { NSMutableArray *compeletearr=[NSMutableArray arrayWithObjects:@"No",@"No",@"No",@"No",@"No",@"No",@"No",@"No",@"No",@"No",@"No", nil]; if ([Checkjhag isEqualToArray:compeletearr] && jhagBrush==YES) { waterClean=YES; [self SoundPlay:@"puzzle_right"];