Remove alpha channel from UIImage

alpha, cgcontext, ios, uiimage, uiimageview

Solution

In the options for the context, try the option

kCGImageAlphaNoneSkipLast

or

kCGImageAlphaNoneSkipFirst

Depending on if you are using RGBA or ARGB

ie,

CGContextRef bitmapContext = CGBitmapContextCreate(NULL,
                                                       rect.size.width,
                                                       rect.size.height,
                                                       CGImageGetBitsPerComponent(imageRef),
                                                       CGImageGetBytesPerRow(imageRef),
                                                       CGImageGetColorSpace(imageRef),
                                                       kCGImageAlphaNoneSkipLast | kCGBitmapByteOrder32Little
                                                       );

Problem

I use the following method to get a decompressed uiimage from file system. However the UIImageView is colored as red when I turn on the color blended layer, even though the UIImageView is set to Opaque. The images on file system don't have alpha channel. I tried set CGContextSetAlpha(bitmapContext, 1), but still has blended layer. Anyone know how to remove alpha channel when using CGContextDrawImage? ``` - (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; } ```

Original source