屏幕的位图
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;
}
我正在使用 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;
}