Androidで画面を記録するためにMediaProjection APIを使用します。私は録音からの視界を隠して、表面を見て安全な視界を作りました。問題は黒い背景の録画に表示され、隠されていないことです。セキュリティで保護されたレイヤーを備えたAndroidスクリーンレコード
録画から完全にビューを隠す方法はありますか?不可視なのですか?
Androidで画面を記録するためにMediaProjection APIを使用します。私は録音からの視界を隠して、表面を見て安全な視界を作りました。問題は黒い背景の録画に表示され、隠されていないことです。セキュリティで保護されたレイヤーを備えたAndroidスクリーンレコード
録画から完全にビューを隠す方法はありますか?不可視なのですか?
私は同じことをやろうとしていましたが、残念ながら私はそれをやり遂げるためのきれいな方法を見つけることができませんでした。私のソリューションでは、記録されたフレームの後処理が必要で、非表示にするレイヤーが半透明のオーバーレイ(すべてのピクセルにはアルファベットが<である必要があります)の場合にのみ機能します。
アイデアは、Androidビューコンポジターで実行されるアルファブレンディングを逆転させることです。
ましょうクレド、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を使用してリアルタイムで実行される場合にのみ有効です。