3

Androidのライブフィードに画像を重ねたい。誰がどこから始めるべきかを提案できますか? 目的の URL を画像に変換しました。以下はコードです:

ImageView imgView = (ImageView) findViewById(R.id.ImageView01); Drawable drawable = LoadImageFromWebOperations("https://www.google.com.pk/logos/classicplus.png"); imgView.setImageDrawable(描画可能);

private Drawable LoadImageFromWebOperations(String url) {
    try {
        InputStream is = (InputStream) new URL(url).getContent();
        Drawable d = Drawable.createFromStream(is, "src name");
        return d;
    } catch (Exception e) {
        System.out.println("Exc=" + e);
        return null;
    }

今、私が欲しいのは、この画像をビデオの目的の領域、つまり手で検出された領域にオーバーレイする方法です。問題は、この関心領域がライブ フィードであるため移動できることです.... 助けていただければ幸いです。

4

1 に答える 1

0

私は 2 つのビューを重ね合わせることでそれを行います (以下ではプレビューとオーバーレイという名前を付けます)。1 つはカメラのプレビューを処理し、もう 1 つはキャンバスを制御して、必要なものを描画します。

res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
  <FrameLayout
      android:id="@+id/toplevelframe"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      >
    <your.project.Preview
    android:id="@+id/preview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />
    <your.project.Overlay
    android:id="@+id/overlay"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />
  </FrameLayout>
</LinearLayout>

あなたの活動クラスでは、onCreate():

...
setContentView(R.layout.main);
mPreview = (Preview) findViewById(R.id.preview);
mOverlay = (Overlay) findViewById(R.id.overlay);
...

onResume():

...
mCamera = Camera.open();
mPreview.setCamera(mCamera);
...

onPause():

if (mCamera != null) {
    mPreview.setCamera(null);
    mCamera.release();
    mCamera = null;
}

クラスOverlayは View を拡張し、キャンバスに描画します。特別なことは何もありません。オーバーライドするだけonDraw()です。

カメラ プレビュー クラス (Preview以下) については、公式ガイドの例を確認してください。次のようになります。

class Preview extends ViewGroup implements SurfaceHolder.Callback {
...
  private SurfaceView mSurfaceView;
  private SurfaceHolder mHolder;
  private Camera mCamera;
...
  public Preview(Context context, AttributeSet aset) {
      ...
      mSurfaceView = new SurfaceView(context);
      addView(mSurfaceView);
      // Install a SurfaceHolder.Callback so we get notified when the
      // underlying surface is created and destroyed.
      mHolder = mSurfaceView.getHolder();
      mHolder.addCallback(this);
      mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  }
...
  public void setCamera(Camera camera) {
      mCamera = camera;
      if (mCamera != null) {
          mSupportedPreviewSizes = mCamera.getParameters().getSupportedPreviewSizes();
          requestLayout();
      }
   }
...
}

次に、 SurfaceHolder.Callbackのすべてのメソッドも実装します。

于 2012-07-26T15:19:13.200 に答える