Я сделал это, и это работает довольно хорошо:
iOS: применение фильтра RGB к оттенкам серого PNG
Однако, это обман, это добавление, поэтому (например) для красного компонента каждого пикселя, R_dest = R_src + R_tint
Если вам нужен детальный контроль, например, вы можете извлечь значение шкалы серого для каждого пикселя путем усреднения компонентов RGB (с соответствующим взвешиванием), а затем умножить это значение на ваш оттенок, чтобы результирующий цвет был оттенки серого (Sr, Sg, Sb) * {Tr, Tg, Tb}
Это потребует создания порции памяти, создания растрового контекста, который рисует в этом порции, рисования вашего изображения в этом контексте, копирования всего фрагмента памяти для сохранности, обработки - получения данных из копии и изменения исходной резервной копии. сохраните, затем извлеките изображение из оригинального резервного хранилища и освободите все, что было выделено.
Проблема с восстановлением UIImage из байтовых данных RGBA
Эта библиотека сделала все для вас, это не самый эффективный маршрут, но она выполняет свою работу. iirc он использует malloc, когда ему следует использовать calloc.