【发布时间】:2013-12-03 04:30:13
【问题描述】:
我有两个后台线程同时运行。 第一个线程将原始像素数据转换为 UIImage(使用 CGImageCreate)并使用 UIImageJPEGRepresentation 将此图像保存为 JPEG。 第二个线程从文件中读取 JPEG 数据并将其加载到 UIImage 中。然后从这个 UIImage 中提取原始像素数据(使用 CGBitmapContextCreate)。
问题是线程写入的 JPEG 偶尔(50 个中有 1 个)数据损坏:
损坏的图像通常具有纯色的顶部/底部区域。
如果我使用互斥锁来防止整个后台方法同时运行,问题就会消失。我也尝试使用 libjpeg 代替 UIKit 方法,它也可以正常工作。
我很确定我的线程不会同时访问相同的图像数据。 据我所知,一些 UIKit 方法是线程安全的。但是在这种情况下看起来有些东西不是线程安全的。
我的问题是,在一个线程上将原始像素数据保存为 JPEG,同时在另一个线程上将 JPEG 解码为原始像素数据的正确方法是什么?我还需要同时在主线程上使用 UIImage 进行一些绘图。
【问题讨论】:
-
为什么不将保存的数据合并为JPEG,然后将JPEG解码为数据,然后在主线程中显示图像?
-
我的应用相当复杂。线程正在处理不同的数据,而不是相同的图像。并且主线程绘制的图像与线程处理的图像不同。
标签: ios multithreading uiimage uikit