iOS 图片显示优化

将:

self.imageView.image = [UIImage imageNamed:@"image_01"];

替换为:

- (void)image {

    UIImageView *imageView = [[UIImageView alloc] init];
    imageView.frame = CGRectMake(100, 100, 100, 56);
    [self.view addSubview:imageView];
    self.imageView = imageView;

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        // 获取CGImage
        CGImageRef cgImage = [UIImage imageNamed:@"image_01"].CGImage;

        // alphaInfo
        CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(cgImage) & kCGBitmapAlphaInfoMask;
        BOOL hasAlpha = NO;
        if (alphaInfo == kCGImageAlphaPremultipliedLast ||
            alphaInfo == kCGImageAlphaPremultipliedFirst ||
            alphaInfo == kCGImageAlphaLast ||
            alphaInfo == kCGImageAlphaFirst) {
            hasAlpha = YES;
        }

        // bitmapInfo
        CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host;
        bitmapInfo |= hasAlpha ? kCGImageAlphaPremultipliedFirst : kCGImageAlphaNoneSkipFirst;

        // size
        size_t width = CGImageGetWidth(cgImage);
        size_t height = CGImageGetHeight(cgImage);

        // context
        CGContextRef context = CGBitmapContextCreate(NULL, width, height, 8, 0, CGColorSpaceCreateDeviceRGB(), bitmapInfo);

        // draw
        CGContextDrawImage(context, CGRectMake(0, 0, width, height), cgImage);

        // get CGImage
        cgImage = CGBitmapContextCreateImage(context);

        // into UIImage
        UIImage *newImage = [UIImage imageWithCGImage:cgImage];

        // release
        CGContextRelease(context);
        CGImageRelease(cgImage);

        // back to the main thread
        dispatch_async(dispatch_get_main_queue(), ^{
            self.imageView.image = newImage;
        });
    });
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 今天为你解读是感召力,这本书的中文版,大约21万字,我会用大约20分钟时间为你讲述书中精髓,如何靠讲话轻松赢得人心...
    菊部不小雨阅读 778评论 0 2
  • 《感召力》|奥小绿解读 关于作者 西蒙•兰卡斯特,世界级的演讲撰稿人,为很多顶级政治家,包括英国前首相布莱尔的内阁...
    艳云美甲正姿护眼笔阅读 185评论 0 0
  • 关于作者 西蒙?兰卡斯特,世界级的演讲撰稿人,为很多顶级政治家,包括英国前首相布莱尔的内阁,还有联合利华、汇丰等世...
    蔚成阅读 369评论 0 0
  • 关于作者 西蒙•兰卡斯特,世界级的演讲撰稿人,为很多顶级政治家,包括英国前首相布莱尔的内阁,还有联合利华、汇丰等世...
    玲玲A阅读 331评论 0 0
  • 001关于作者 西蒙•兰卡斯特,世界级的演讲撰稿人,为很多顶级政治家,包括英国前首相布莱尔的内阁,还有联合利华、汇...
    河马先森阅读 233评论 0 0

友情链接更多精彩内容