web-dev-qa-db-ja.com

カメラプレビューSurfaceViewへの画像のオーバーレイ

画像の描画に使用されているSurfaceViewがあり、携帯電話のカメラからのライブフィードにそれらをオーバーレイしたいと思います。

現在、画像を含むSurfaceViewの背景は白ですが、携帯電話のカメラフィードにオーバーレイする場合、透明にする必要があります。カメラとアニメーションの描画を同じSurfaceViewで行うことはできません。

カメラの管理と画像の描画を含む複数のビューの使用を追求する最良のコースは何ですか? SurfaceViewを透明にすることは可能ですか?

32
GobiasKoffi

私も拡張アプリケーションをやっていて、あなたが遭遇したのと同じ問題にぶつかります。正しい解決方法に関する情報はほとんどありません。しかし、mixareと呼ばれるフレームワークを見つけました-Android用のARアプリを作成できます。あなたは間違いなくそれを見るべきです source -それはかなり有望に見えます。これがあなたのお役に立てば幸いです。

6
matekm

次のアプローチで成功しました。

まず、次のようなレイアウトxmlファイルを作成します(2つのビューの順序に注意してください)。

<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent" Android:layout_height="fill_parent"
    Android:orientation="vertical">

    <com.yourcustom.OverlayView
        Android:id="@+id/overlay" Android:layout_width="fill_parent"
        Android:layout_height="fill_parent">
    </com.yourcustom.OverlayView>

    <SurfaceView Android:id="@+id/surface"
        Android:layout_width="fill_parent" Android:layout_height="fill_parent">
    </SurfaceView>

</FrameLayout>

OverlayViewは、描画スレッドとアニメーションスレッドの実装を持つSurfaceViewのサブクラスです。もう1つのSurfaceViewは、カメラプレビューを処理するサーフェスになります。 onCreateの内部では、次のようにビューを設定する必要があります。

    mView = (OverlayView)this.findViewById(R.id.overlay);
    mView.getHolder().setFormat(PixelFormat.TRANSLUCENT); 

    mSurfaceView = (SurfaceView)this.findViewById(R.id.surface);
    mSurfaceHolder = mSurfaceView.getHolder();
    mSurfaceHolder.addCallback(this);
    mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_Push_BUFFERS);

アニメーションスレッドを処理するSurfaceHoldermViewSurfaceHolder.Callback実装を追加する必要があります。サブクラス内でこれを実装し、アニメーション/描画スレッドを使用する例は、古いLunarLanderの例にあります: http://developer.Android.com/resources/samples/LunarLander/src/com/example/ Android/lunarlander/LunarView.html

それに加えて、この例と同じ方法でカメラSurfaceViewをセットアップします: http://developer.Android.com/resources/samples/ApiDemos/src/com/example/Android/apis/graphics/CameraPreview.html

6
Frank

MIGHT このコード help? `

1
Pontus Gagge

ハンドセットを4.0.4にアップグレードすると、少し奇妙な余震が見つかりました。全画面カメラプレビューに半透明のgl全画面オーバーレイがあります。これは、以前のicsビルドで非常にうまく機能しました(4.0.3でしたが、確実ではありませんでした)。 4.0.4にアップグレードした後、プレビューは少し混乱しました。カメラ画像は、カメラ画像の明るい部分のいずれかでサイケデリックな色のプライマリエリアを表示しました(暗い部分は問題なく見えました)。最終的に、glclearcolourを0.5、0.5、0.5から0,0,0,0に変更することがわかりました。 0はそれを整理しました。

Glオーバーレイの未使用部分のアルファがゼロであったとしても、ブレンド機能はまだglの灰色の背景を考慮していたようです。

0
pootle