Я хочу применить какой-то фильтр изображений к тому, что отображается на экране устройства Android. Простейшим примером фильтра изображения может быть фильтр Sepia, применяемый к буфере кадра непосредственно перед его отображением на экране. И просто, чтобы убедиться, я хочу, чтобы этот эффект был широко, а не только в моем приложении.применять фильтры к буферам кадров непосредственно перед его отображением
0
A
ответ
0
Чтобы сделать эффект общесистемным, вам необходимо будет изменить SurfaceFlinger для применения фильтра.
В Android 5.0 «Lollipop» вы можете увидеть прототип реализации кода, который изменяет результат, чтобы улучшить контрастность для людей с цветным слепым. См. Код Daltonizer и как он подключен к doDisplayComposition()
в SurfaceFlinger.cpp. Обратите внимание, что это влияет на эффект при составлении поверхности и, следовательно, отключает Hardware Composer.
Невозможно сделать это в масштабе всей системы из приложения. Если бы это было так, вы могли бы повредить всю систему.
В android 5.0 они используют RenderEngine для рендеринга цветовых эффектов с использованием цветных матриц. Я действительно работаю над Android 4.3 ... Я пробовал несколько вещей, таких как изменение буфера внутри onFrameAvailable() и несколько других функций, но ничего не работало ... Можете ли вы указать мне в правильном направлении, учитывая, что я хочу сделать это с Android 4.3 – thunderbird
Возможно, вам понадобится back-port поддержка GLES2. «RenderEngine» был учтен, чтобы работать как GLES1, так и GLES2, но GLES1 используется только для эмулятора с ускорением без GPU. Одной из мотивов обновления GLES2 было уметь делать такие эффекты, как вы хотите. Альтернатива - выяснить, как сделать эффект, который вы хотите в GLES1. – fadden
Я понятия не имею о OpenGL или GLES .. обязательно посмотрю на это, хотя ... то, что меня больше интересовало, был какой-то необоснованный буфер символов, на который я могу напрямую применять какой-либо фильтр, так как у меня нет прежних знаний о OpenGL или GLES – thunderbird