2013-12-03 2 views
0

У меня есть два фоновых потока, запущенных одновременно. Первый поток преобразует необработанные пиксельные данные в UIImage (используя CGImageCreate) и сохраняет это изображение в формате JPEG с использованием представления UIImageJPEGRepresentation. Второй поток читает данные JPEG из файла и загружает его в UIImage. Затем необработанные пиксельные данные извлекаются из этого UIImage (используя CGBitmapContextCreate).Обработка изображений JPEG в фоновом режиме

Проблема заключается в том, что иногда (1 из 50) JPEGs нить записывает развратила данные: Corrupted image

Поврежденный изображения, как правило, имеет верх/низ поле сплошного цвета.

Проблема исчезнет, ​​если я использую мьютекс, чтобы предотвратить одновременное выполнение всех фоновых методов. Я также пытался использовать libjpeg вместо методов UIKit, и он также отлично работает.

Я уверен, что мои потоки никогда не получат одинаковые данные изображения одновременно. Насколько я знаю, некоторые из методов UIKit являются потокобезопасными. Но в этом случае что-то не является потокобезопасным.

Мой вопрос в том, что было бы правильным подходом к сохранению необработанных пиксельных данных в виде JPEG в одном потоке, при декодировании JPEG в необработанные данные пикселя на другом? Мне также понадобится сделать рисунок, используя UIImage в основном потоке одновременно.

+0

Почему бы не объединить данные сохранения в формате JPEG и декодировать JPEG в данные вместе, а затем отобразить изображение в основной теме? – chancyWu

+0

Мое приложение довольно сложно. Потоки обрабатывают разные данные, а не одно и то же изображение. И основной поток рисует изображения, отличные от тех, которые обрабатываются потоками. – Lev

ответ

1

Оказывается, проблема заключалась в том, что я удалил данные пикселя, которые я передал CGDataProviderCreateWithData после создания CGImage. Данные могут быть уничтожены только после вызова обратного вызова CGDataProviderReleaseDataCallback.

Смежные вопросы