Рисование цветовой карты с помощью Core Graphics

#iphone #objective-c #cocoa-touch #core-graphics #cgcontext

#iPhone #objective-c #cocoa-touch #core-графика #cgcontext

Вопрос:

Я пытаюсь выяснить, как нарисовать цветовую карту следующим образом: http://www.ritsplasman.com/images/colormap.png

Я знаю, что Core Graphics имеет две функции, которые имеют дело с градиентами: CGContextDrawLinearGradient и CGContextDrawRadialGradient . Радиальный градиент — это не то, что я хочу, поэтому, я думаю, я вынужден использовать другой. Но я не могу создать изображение в примере, используя только линейный градиент.

Цветовая карта — это, по сути, градиент, в котором оттенок меняется по горизонтали, а насыщенность — по вертикали. Как я могу этого добиться?

Ответ №1:

Как следует из названия, линейный градиент распространяется только на одну ось. Теоретически вы могли бы наложить несколько градиентов друг на друга, чтобы создать эффект, аналогичный изображению, но я сомневаюсь, что это было бы очень эффективным решением проблемы. Мне нужна была похожая цветовая карта в одном из моих приложений для iOS, в итоге я использовал изображение, потому что это было намного эффективнее, чем пытаться воссоздать его.

Комментарии:

1. Должна быть возможность нарисовать градиент один раз, используя Core Graphics, затем сохранить его в формате .png, который я могу использовать в своем приложении, таким образом, он по-прежнему эффективен. Мне просто нужен способ нарисовать ее с помощью компьютерной графики, чтобы я мог слегка модифицировать ее по своим собственным пожеланиям.

2. Вы можете рисовать в контексте растрового изображения, а затем сохранять его в виде файла PNG.

3. Да, я уже знаю, как рисовать в контексте растрового изображения и сохранять его в виде файла, но я понятия не имею, как на самом деле нарисовать цветовую карту. Идея «наложить несколько градиентов друг на друга» для меня имеет смысл, но я действительно не знаю, как это реализовать.. (рисование с использованием оттенка, насыщенности и т.д.)

4. Вам нужно будет выполнить весь рисунок в формате rgb, поэтому вам придется выполнить преобразование для каждого из значений HSV. Вы настроите линейный градиент для всех цветов вдоль оси x с помощью CGGradientCreateWithColorComponents, а затем нарисуете его с помощью CGContextDrawLinearGradient, затем переместитесь вниз по оси y и создайте следующий градиент для второй «строки» изображения. Это будет сложный процесс, но, надеюсь, этого достаточно, чтобы понять, с чего начать.