2012-04-25 54 views
3

我正试图从相机预览和其上的ImageView合成图像。我有一个形象,是被设置在一个imageview的这样合并相机预览和图像?

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

一个透明的PNG我然后将其添加到FrameLayout里这已经显示,像这样我的相机预览(继承SurfaceView):

preview = (FrameLayout) findViewById(R.id.camera_preview); 
preview.addView(cp); //cp is a reference to a camera preview object 
preview.addView(iv); 

我的ImageView照片是这样的:

enter image description here

而且屏幕是这样的(我不得不采取从anothe一个知情同意[R摄像头,因为DDMS截图中没有显示预览只图像和黑色屏幕,不知道这是一个相关的,虽然):

enter image description here

现在我的任务是把那张照片与ImageView的。我提出了两种方法,我不知道他们是否可以实施

  1. 单独保存图片,跟踪图片上的封面,然后合并。可以这样做,以及如何?
  2. 增益,其中两个视图是居住,并保存为图像的特定区域的
  3. 采取截图的FrameLayout的样子,我会onky这一块做的也就是最后的手段,如果可以做到这一点

我想知道的是这些方法中的哪一个是可能的,它是如何完成的?还是有更好的方法来完成这件事?

+0

你可以添加一个视图像相机预览像合并单个活动上的两个视图 – SilentKiller 2012-04-25 12:51:50

回答

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作为目标构建由于BitmapFactory.Options.inMutable在该API中不可用,因此在那里获取可变位图的方式是什么水平。 – prometheuspk 2012-04-25 13:15:51

+0

你是对的,它被添加到蜂窝。我更新了我的回答 – 2012-04-25 13:19:58

+0

现在是否可变? – prometheuspk 2012-04-25 13:25:07