У меня есть два фоновых потока, запущенных одновременно. Первый поток преобразует необработанные пиксельные данные в UIImage (используя CGImageCreate) и сохраняет это изображение в формате JPEG с использованием представления UIImageJPEGRepresentation. Второй поток читает данные JPEG из файла и загружает его в UIImage. Затем необработанные пиксельные данные извлекаются из этого UIImage (используя CGBitmapContextCreate).Обработка изображений JPEG в фоновом режиме
Проблема заключается в том, что иногда (1 из 50) JPEGs нить записывает развратила данные:
Поврежденный изображения, как правило, имеет верх/низ поле сплошного цвета.
Проблема исчезнет, если я использую мьютекс, чтобы предотвратить одновременное выполнение всех фоновых методов. Я также пытался использовать libjpeg вместо методов UIKit, и он также отлично работает.
Я уверен, что мои потоки никогда не получат одинаковые данные изображения одновременно. Насколько я знаю, некоторые из методов UIKit являются потокобезопасными. Но в этом случае что-то не является потокобезопасным.
Мой вопрос в том, что было бы правильным подходом к сохранению необработанных пиксельных данных в виде JPEG в одном потоке, при декодировании JPEG в необработанные данные пикселя на другом? Мне также понадобится сделать рисунок, используя UIImage в основном потоке одновременно.
Почему бы не объединить данные сохранения в формате JPEG и декодировать JPEG в данные вместе, а затем отобразить изображение в основной теме? – chancyWu
Мое приложение довольно сложно. Потоки обрабатывают разные данные, а не одно и то же изображение. И основной поток рисует изображения, отличные от тех, которые обрабатываются потоками. – Lev