【问题标题】:How exactly to make a CGImageRef from an image on disk如何准确地从磁盘上的图像制作 CGImageRef
【发布时间】:2011-04-02 18:53:53
【问题描述】:

我四处张望都无济于事。我正在一个线程中进行一些图像加载,并且由于 UIKit 不是线程安全的,我将不得不将图像存储为 CGImageRefs 但我不知道如何做到这一点。我以前没有玩过任何 Quartz 的东西,所以这让我很困惑。基本上我只需要将磁盘中的 JPG 加载到 CGImageRef 中。另外为了加分,是否有将 GIF 加载到 CGImageRef 中?

【问题讨论】:

    标签: iphone jpeg quartz-graphics gif cgimage


    【解决方案1】:

    gcamp 或多或少是正确的,在后台线程上使用它是非常安全的,但要回答你的问题,我相信以下方法会起作用。

    CGDataProviderRef dataProvider = CGDataProviderCreateWithFilename("file");
    CGImageRef image = CGImageCreateWithPNGDataProvider(dataProvider, NULL, NO, kCGRenderingIntentDefault);
    

    还有一个jpg图片的功能,CGImageCreateWithJPEGDataProvider

    (完成后一定要释放数据提供者和图像)

    【讨论】:

      【解决方案2】:

      我认为最简单的方法是使用 UIKit 并使用 UIImageCGImage 专有性。

      类似的东西:

      UIImage* image = [UIImage imageNamed:@"Your Image.png"];
      CGImageRef imageRef = image.CGImage;
      

      【讨论】:

      • 好的,但重点是,这是在线程中发生的,UIKit 不是线程安全的。否则我只会发回 UIImage。我需要能够从文件中读取图像并直接为其创建 CGImageRef
      • 不幸的是,OP 是对的,Apple 说“所有 UIKit 对象都应该只在主线程上使用。”
      • 如果我没记错的话,UI 更新应该在主线程上完成。 UIKit 的其他部分实际上是线程安全的。
      • 是的 UI 更新应该在主线程上完成,但是我只是从磁盘加载图像(这是 UI 线程上一个昂贵的过程)并且没有 UIImages 不是线程安全的,因此 CGImageRefs
      • 实际上,从 iOS4 开始,UIImage 是线程安全的。它们是常态的罕见例外。
      猜你喜欢
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 2022-06-27
      • 2016-02-25
      相关资源
      最近更新 更多