Не могу предложить конкретный ответ, но общий подход заключается в том, чтобы сделать нечто подобное.
В 32-битном изображении у вас есть 4 канала информации о пикселях: красные пиксели, зеленые пиксели, синие пиксели и альфа-значениедля каждого пикселя.
Серое изображение, как вы знаете из использования любой программы рисования, - это когда все три цветовых компонента красный, зеленый и синий имеют равные значения интенсивности.
Например
Значение rgb (0.5,0.5,0.5) будет на полпути между черным и белым.
Могу предложить, что вы ищете, где пользователь нажимает на экран, беря прямоугольную выборку пикселей из точки касания вВ цикле памяти просматриваются все пиксели образца и устанавливаются равные значения красного, зеленого и синего цветов, а затем заново перерисовывается вновь измененное изображение в представление.
Если вы хотите быстро преобразовать все изображение в оттенки серого,можно использовать GPUImageFramework от Брэда Ларсона?(извиняюсь, если я неправильно написал ваше имя Брэд: P).
Вы можете использовать его класс GrayScaleFilter для создания изображения в градациях серого.