ios - цвет на симуляторе xcode отличается от цвета на устройстве

<p><strong>обзор</strong></p><p>цвет фона моего приложения для iphone в симуляторе (imac) отличается от цвета на устройстве (iphone 3gs).</p><p><strong>редактировать (добавлен следующий раздел)</strong></p><p>следующие все разные:</p><ol> <li>цвет раскадровки (файл xib)</li> <li>цвет симулятора</li> <li>цвет устройства</li> </ol><p>я полагаю, я должен идти с тем, как это выглядит на устройстве.</p><p><strong>вопросы</strong></p><ol> <li>является ли это общей проблемой, с которой сталкиваются другие разработчики, и есть ли способ подобрать цвета (систематическая процедура)?</li> <li>будет ли цвет выглядеть по-разному на разных версиях iphone (3gs/4/4s) или на всех цветах?</li> <li>я что-то упустил, есть ли какой-то определенный цветовой профиль, который я должен использовать?</li> <li>есть ли что-то вроде практического правила, когда значения rgb меняются на определенный процент?</li> <li>в iphone 4 и 4s цвет соответствует симулятору? (у меня нет iphone4 и 4s, поэтому я не уверен.)</li> </ol>

<p>благодарим @jtbandes за предложение отправить скриншоты, которые привели к решению</p><p>я просто отвечаю на вопрос для полноты.</p><p><strong>шаги, за которыми я следовал:</strong></p><ol> <li>сделайте скриншот изображения в раскадровке</li> <li>сделайте скриншот изображения на устройстве (используйте поток почты/фото обратно на ваш mac)</li> <li>используйте средство выбора цвета (часть цветовой палитры mac os), чтобы выбрать одно и то же место на обоих снимках экрана</li> <li>запишите значения rgb (доступные в цветовой палитре mac os) точек, выбранных на шаге 3</li> <li>сравнить оба значения rgb и увидеть разницу</li> <li>добавьте смещение rgb, чтобы соответствовать цвету.</li> </ol><p><strong>мое смещение rgb (не следует слепо)</strong></p><p>основываясь на моем опыте, я добавил следующие значения rgb, чтобы получить нужный цвет, он только грубый и работал для меня:</p><ul> <li>красный +12</li> <li>зеленый +19</li> <li>синий +16</li> </ul><p><strong>под разными углами (лучше держать горизонтально)</strong></p><p>удержание телефона под разными углами также дает разные оттенки, а горизонтальное положение дает цвет</p>

<p>как уже отмечали другие, это проблема <strong> цветовых пространств </strong>.</p><p>необходимо выполнить две задачи:</p><ol> <li>получите исходный цвет, используя цветовое пространство srgb.</li> <li>установите цвет в интерфейсном разработчике, используя цветовое пространство srgb.</li> </ol><p><strong> задание 1 </strong></p><p>вы можете использовать приложение apple <code>digital color meter</code> для выборки нужного цвета, используя опцию <code>display in srgb</code>, но вывод очень ограничен.</p><p>другой вариант - использовать приложение типа <code>sipit</code> (доступно бесплатно в app store, последний раз я проверял). убедитесь, что вы выполняете выборку в правильном цветовом пространстве, выполнив:</p><pre><code>preferences -> general -> color profiles -> srgb </code></pre><p>вы также можете установить выходной формат (например, шестнадцатеричная строка).</p><p> <a href="https://i.stack.imgur.com/3p5um.png"><img src="https://i.stack.imgur.com/3p5um.png" alt="enter image description here"></a> <strong> задание 2 </strong></p><p>в интерфейсном разработчике откройте окно цвет, выберите вторую панель, выберите "ползунки rgb". затем нажмите на значок шестеренки, чтобы выбрать цветовой профиль srgb.</p><p> <a href="https://i.stack.imgur.com/ieqvo.png"><img src="https://i.stack.imgur.com/ieqvo.png" alt="enter image description here"></a> </p><p>после этого вставьте значение цвета в поле <code>hex color #</code></p><p>вы сделали! ваши цвета должны соответствовать.</p><p><em> я никоим образом не связан с sipit. но я пользуюсь им несколько лет, и это очень удобно. я бы порекомендовал это любому дизайнеру. </em></p>

<p>текущая (по состоянию на 17.03.14) ссылка на cgcolorspace содержит следующий текст, в котором говорится, что srgb - это цветовое пространство нативного устройства для ios.</p><blockquote> <p>цветовые пространства и ios: ios не поддерживает colorsync, поэтому все ресурсы должны быть предоставлены в цветовом пространстве собственного устройства: srgb.</p> </blockquote>

<p>это о <strong> цветовых пространствах </strong>.</p><p>убедитесь, что вы выбираете цвет из пространства <code>srgb</code>color и реплицируете его значения rgba в interface builder, выбрав <code>srgb iec61966-2.1</code> в раскрывающемся меню.</p><p>если вы выберете цвет в одном цветовом пространстве и сгенерируете его в другом цветовом пространстве, он будет выглядеть по-разному, несмотря на то, что он повторял одинаковые значения rgba.</p><p>также имейте в виду, что когда вы генерируете цвет с помощью кода, используя <code>uicolor(red:green:blue:alpha:)</code>, он генерируется в цветовом пространстве <code>srgb</code> по умолчанию. вот почему так удобно использовать этот (вместо <code>adobe rgb</code>, <code>p3</code> или любого другого). кроме того, <code>srgb</code> - это стандарт, который в настоящее время наиболее широко используется в отрасли.</p><p>интересный факт: тот конструктор <code>uicolor</code>, о котором я упоминал выше, создает цвета в пространстве <code>srgb</code> начиная с xcode8. до этого эта функция использовалась для их создания в пространстве <code>generic rgb</code>. вот почему это может вызвать путаницу тоже.</p><p>вот ресурс, который расширяет эту тему: <a href="https://medium.com/@volbap/working-efficiently-with-colors-in-xcode-bc4c58b16f9a">https://medium.com/@volbap/working-efficiently-with-colors-in-xcode-bc4c58b16f9a</a> </p>

<p>еще одно простое решение при работе с файлами изображений в вашем приложении. во-первых, установите цветовое пространство в xcode в srgb iec61966-2.1 и примените ваши цвета. затем, прежде чем импортировать изображения в свое приложение, сопоставьте их с профилем srgb iec61966-2.1 с помощью утилиты colorsync на mac. отлично сработало для меня, и мой фон теперь идеально соответствует моим импортированным изображениям. надеюсь, это кому-нибудь поможет.</p>

<p>iphone использует управление цветовым пространством, поэтому, если вы хотите более "научное" решение, вы можете создать собственное цветовое пространство, например, с помощью <code>cgcolorspacecreatecalibratedrgb</code>. это на уровне ядра графики, хотя.</p>

<p>лучший способ преобразовать значения rgb в srgb - использовать инструмент "цифровой измеритель цвета" в mac, просто отметьте "отображать в srgb".</p><p> <a href="https://i.stack.imgur.com/ealdt.png"><img src="https://i.stack.imgur.com/ealdt.png" alt="digital color meter"></a> </p><p>затем используйте значения srgb в вашем коде вместо rgb <a href="https://i.stack.imgur.com/myidv.png"><img src="https://i.stack.imgur.com/myidv.png" alt="native values"></a> </p><p> <a href="https://i.stack.imgur.com/9r6bc.png"><img src="https://i.stack.imgur.com/9r6bc.png" alt="enter image description here"></a> </p><p>с помощью этого инструмента вы можете узнать общий цвет rgb и установить его непосредственно в xcode в качестве значений rgb.</p>

<p>вы можете использовать это <a href="http://inaka.net/blog/2014/09/05/getting-the-right-colors-in-your-ios-app/">webpage</a> для различных колод цветов в xcode. например, generic и device colors немного отличаются.</p>

<p>у меня была похожая проблема, особенно с зеленью в моем проекте. моя проблема оказалась в том, что некоторые из моих активов были созданы в иллюстраторе, а цвет был установлен на cmyk вместо rgb. я не уверен, была ли это ваша проблема или нет, но это может быть полезно для тех, кто столкнется с этим вопросом в будущем. я изменил иллюстратор "режим цвета документа" на rgb и все хорошо.</p>