2012-04-25 9 views
3

私はカメラのプレビューとその上にあるImageViewから合成画像を作成しようとしています。カメラのプレビューと画像をマージしますか?

preview = (FrameLayout) findViewById(R.id.camera_preview); 
preview.addView(cp); //cp is a reference to a camera preview object 
preview.addView(iv); 
:私は、私はそのようにように(SurfaceViewを継承しています)、すでに私のカメラのプレビューを示しているでframeLayoutに追加この

ImageView iv = new ImageView(this); 
iv.setImageResource(R.drawable.one); 

などのImageViewの上に設定されて透過PNGで一つの画像を持っています

私のImageViewのの画像はこれです:

enter image description here

そして画面はこのようなものである(私はanotheから写真を取らなければなりませんでしたR DDMSのスクリーンショットは、それはしかし、関連するかどうかわからない、プレビューにのみ画像と黒い画面が表示されなかったので、カメラ):

enter image description here

今私の仕事はしている写真を撮ることですイメージビュー。私は、彼らがまたは

  1. イメージにあった、その後、何らかの方法をマージしたカバーを追跡し、別途画像を保存を実装することができないことができるかどうかわかりませんどちらも二つのアプローチ、思い付きました。これはできますか?これを行うことができる場合
  2. ゲイン両方のビューが常駐し、画像として特定の領域の
  3. テイクスクリーンショットを保存しているでframeLayoutの外観、私はつまり、最後の手段として、このいずれかを実行しonkyます

私が知りたいことは、これらのアプローチのうちどれが可能であり、どうすればできるのかです。これを行うには良い方法がありますか?

+0

ビューを追加することができます.1つのアクティビティで2つのビューをマージする – SilentKiller

答えて

5

イメージはすでにjpegコールバックからbyte[] dataという形になっているとします。

  1. デコード可変ビットマップへの画像:

    Bitmap photo = BitmapFactory.decodeByteArray(data, 0, data.length); 
    photo = photo.copy(photo.getConfig(), true); 
    
  2. はオーバーレイを読む:写真上

    Bitmap overlay = BitmapFactory.decodeResource(getResources(), R.drawable.one); 
    
  3. ドローオーバーレイ:

    Canvas canvas = new Canvas(photo); 
    canvas.drawBitmap(overlay, new Matrix(), null); 
    

今、photoに画像が含まれているはずです。

+0

ターゲットとして2.1をビルドしています。そのAPIでBitmapFactory.Options.inMutableが利用できないため、そこに可変ビットマップを取得する方法レベル。 – prometheuspk

+0

あなたは正しいです、それはHoneycombに追加されました。私は自分の答えを –

+0

更新しましたか? – prometheuspk

関連する問題