2017-01-12 6 views
1

Я использую API MediaProjection для записи экрана в Android. Я хочу скрыть вид из записи, поэтому я сделал вид сверху и сделал безопасный вид. Проблема заключается в том, что вид появляется в записи с черным фоном, а не скрыт.Запись экрана Android с защищенными слоями

Есть ли способ полностью скрыть представление от записи .. как это невидимо?

ответ

0

Я пытался сделать то же самое, но, к сожалению, я не мог найти чистый способ сделать это. Мое решение требует постобработки записанных кадров и работает только в том случае, если слой, который вы хотите скрыть, является полупрозрачным наложением (все пиксели должны иметь альфа < 1).

Идея состоит в том, чтобы инвертировать альфа-смешение, выполняемое компонентом просмотра Android.

Пусть Cred, Cgreen, Cblue и Calpha быть цветовые компоненты для вашего наложения и пусть Бред, Bgreen, Bblue быть цветовые компоненты для всего, что в фоновом режиме , Окончательный цвет, который будет отображаться в кадре для каждого пикселя задается следующей формулой:

Ored = Bred * (1 - Calpha) + Cred * Calpha 
Ogreen = Bgreen * (1 - Calpha) + Cgreen * Calpha 
Oblue = Bblue * (1 - Calpha) + Cblue * Calpha 

Если у вас есть точное растровое изображение наложения слоя, который вы хотите скрыть, вы можете восстановить цвета фона, как это :

Bred = (Ored - Cred * Calpha)/(1 - Calpha) 
Bgreen = (Ogreen - Cgreen * Calpha)/(1 - Calpha) 
Bblue = (Oblue - Cblue * Calpha)/(1 - Calpha) 

Конечно, некоторая информация будет потеряна в процессе, потому что цвета в конечном итоге преобразуются в 8-битные целые числа. Таким образом, реконструкция может создавать визуальные артефакты, но она всегда должна выглядеть лучше черного наложения. Артефакты будут более или менее выражены в зависимости от альфа-канала вашего наложения (альфа-значения, близкие к 0, позволят вам более точно восстановить фоновый цвет).

Это будет работать только с изображениями с полным разрешением. Любой вид масштабирования или сжатия с потерями нарушит эту технику. Из-за ограничений хранения эта пост-обработка, вероятно, будет жизнеспособной, если она выполняется в режиме реального времени с использованием SurfaceTexture в шейдерном проходе.

 Смежные вопросы

  • Нет связанных вопросов^_^