Java 将相机预览与图像合并?

Java 将相机预览与图像合并?,java,android,image,android-camera,augmented-reality,Java,Android,Image,Android Camera,Augmented Reality,我正在尝试从相机预览和它上面的ImageView制作合成图像。我有一个图像是一个透明的png,它设置在像这样的imageview上 ImageView iv = new ImageView(this); iv.setImageResource(R.drawable.one); 然后,我将其添加到已显示我的相机预览(继承SurfaceView)的framelayout中,如下所示: 我的imageview的图片如下: 屏幕是这样的(我不得不从另一台相机上拍摄照片,因为DDMS屏幕截图没有显示预

我正在尝试从相机预览和它上面的
ImageView
制作合成图像。我有一个图像是一个透明的png,它设置在像这样的imageview上

ImageView iv = new ImageView(this);
iv.setImageResource(R.drawable.one);
然后,我将其添加到已显示我的相机预览(继承SurfaceView)的framelayout中,如下所示:

我的imageview的图片如下:

屏幕是这样的(我不得不从另一台相机上拍摄照片,因为DDMS屏幕截图没有显示预览画面,只有图像和黑屏,不知道这是否相关):

现在我的任务是用imageview拍摄这张照片。我提出了两种方法,我不知道它们是否可以实施

  • 分别保存图片,跟踪图片上的封面,然后以某种方式合并。这能做到吗?如何做到
  • 获得两个视图所在的framelayout的外观并另存为图像
  • 拍摄一个特定区域的屏幕截图,我将把这一次作为最后的手段,也就是说,如果可以做到的话

  • 我想知道的是,这些方法中哪一种是可能的,以及如何实现?或者有更好的方法来完成这项工作吗?

    假设您已经从jpeg回调中获得了
    字节[]数据形式的图像

  • 将图像解码为可变位图:

    Bitmap photo = BitmapFactory.decodeByteArray(data, 0, data.length);
    photo = photo.copy(photo.getConfig(), true);
    
  • 阅读覆盖图:

    Bitmap overlay = BitmapFactory.decodeResource(getResources(), R.drawable.one);
    
  • 在照片上绘制覆盖图:

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

  • 现在,
    photo
    应该包含您的图像。

    您可以添加一个带有摄像头预览的视图,就像在单个活动上合并两个视图一样。我正在以2.1为目标构建一个可变位图,因为BitmapFactory.Options.inMutable在该API级别不可用。您是对的,它是添加到蜂巢中的。我更新了我的答案是的,应该是。请参阅
    photo.copy()
    方法占用了大量内存,并引发了
    OutOfMemoryException
    。然后,我使用
    createScaledBitmap
    方法设置覆盖的高度和重量。但我先保存了原始照片。
    Canvas canvas = new Canvas(photo);
    canvas.drawBitmap(overlay, new Matrix(), null);