Да, Skia / SkiaSharp позволит вам трансформировать цвета. Помимо использования матричного преобразования, вы можете использовать таблицы переназначения цветов.
Создайте SKColorFilter, используя SKColorFilter.CreateTable(alphaRemapTable, redRemapTable, blueRemapTable, greeenRemapTable)
Эти таблицы представляют собой байтовые массивы длиной 256 элементов. Преобразование работает так, что компонент начального цвета используется в качестве индекса для поиска значения, к которому он должен быть переназначен, например. 10 red преобразуется в значение в красном массиве с индексом 10.
Передача нулевого значения в любой из аргументов оставит этот компонент цвета без изменений.
Дополнительная информация: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/effects/color-filters
Замените двумя или больше пробелами одно пространство:
s/ +/ /g
Править: для любого пробела (не только располагает с интервалами) можно использовать \s, если Вы пользуетесь perl-совместимой regex библиотекой и изогнутым синтаксисом фигурной скобки для количества случаев, например.
s/\s\s+/ /g
или
s/\s{2,}/ /g
Редактирование № 2: забыл/g глобальный суффикс, JL спасибо
Существует ли конкретная причина, которую Вы просите регулярное выражение? Они не могут быть лучшим инструментом для этой задачи.
Замена как
s/[ \t]+/ /g
должен сжать внутренний пробел (на самом деле, он сожмет ведущий и запаздывающий пробел также, но он не кажется, что это - проблема.), и
s/[ \t]+$/$/
будет заботиться о запаздывающем пробеле. [Я использую sed
синтаксис выхода здесь. Вы не сказали, какую разновидность Вы предпочитаете.]
Сразу же рука я не вижу способ сделать это в отдельном выражении.
Поскольку сжатие пробелов и обрезка пробелов по краям - концептуально разные операции, мне нравится делать это в два этапа:
re.replace("s/\s+/ /g", str.strip())
Не самый эффективный, но вполне читаемый.
/ (^ [\ s \ t] + | [\ s \ t] + ([\ s \ t] | $)) / g заменить на $ 2 (начало | середина / конец)