屏幕的位图

Bitmap of a Screen

我正在使用 Camera2 API。我在纹理视图中有相机预览。以及放置在纹理视图上的图像。 imageView 和 textureView 放在一个 RelativeLayout 中。

获取 rootView 并将其转换为 Bitmap 后,我在纹理视图中只会出现黑屏,如下所示:

View rootView = findViewById(android.R.id.content).getRootView();
    rootView.setDrawingCacheEnabled(true);
    return rootView.getDrawingCache();

方法 getBitmap() returns 纹理视图的位图成功,但 id 不包括覆盖在其上的 imageView。

如何获取叠加了图片的textureView的Bitmap?

已引用链接:

How can i place dynamic image view over texture view?

我的布局结构如下:

<FrameLayout
    android:id="@+id/frameLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextureView
        android:id="@+id/textureView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ImageView
        android:id="@+id/SelectedImage"
        android:layout_width="140dp"
        android:layout_height="140dp" />

</FrameLayout>

当单独生成位图时问题已解决,一张用于使用 .getBitmap() 的纹理视图,一张用于 imageView。

然后通过获取其在屏幕上的位置的参数来覆盖 imageView。

public Bitmap takeScreenshot() {
    TextureView cameraTextureView=(TextureView)findViewById(R.id.CameraTextureView);
    Bitmap bitmapTextureView=cameraTextureView.getBitmap();
    ImageView selectedImageView=(ImageView)findViewById(R.id.SelectedImageView);
    Bitmap bitmapImageView;
    BitmapDrawable ImageViewDrawable=(BitmapDrawable)selectedImageView.getDrawable();
    if(ImageView.getDrawable()!=null){
        bitmapImageView=ImageViewDrawable.getBitmap();
        Log.e(TAG, "takeScreenshot: "+bitmapImageView.getHeight()+" ,"+bitmapImageView.getWidth());
        bitmapImageView=Bitmap.createScaledBitmap(bitmapImageView,selectedImageView.getWidth(),selectedImageView.getHeight(),false);
        Bitmap overlay=Bitmap.createBitmap(bitmapTextureView.getWidth(),bitmapTextureView.getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas=new Canvas(overlay);
        canvas.drawBitmap(bitmapTextureView,new Matrix(),null);
        canvas.drawBitmap(bitmapImageView,selectedImageView.getLeft(),selectedImageView.getTop(),null);
        screenshotBitmap=overlay;
        return overlay;
    }
    return bitmapTextureView;
}