如何截取用户可以看到的 xamarin 表单的屏幕截图
How to take a screenshot of what the user can see xamarin forms
我看过许多其他使用 Xamarin.Essentials.Screenshot.CaptureAsync() 的帖子。问题在于它采用最顶层视图的屏幕截图,而不是用户可以看到的内容。
我的问题是,是否可以截取用户可以看到的内容的屏幕截图?如果可以,怎么做?
编辑:
我一直不太清楚我想要达到的目标,所以这里是:
我正在尝试截取 phone 默认屏幕(所有应用程序所在的位置等)以及其他应用程序。因此,为此我使用了前台服务。它有效,但屏幕截图仍然只是应用程序的视图
下面的代码可以获取activity带位图的视图,然后可以将位图保存为图片文件到设备中。
private void takeScreenShot(Activity activity)
{
View view = activity.Window.DecorView;
view.DrawingCacheEnabled = true;
view.BuildDrawingCache();
Bitmap bitmap = view.DrawingCache;
Rect rect = new Rect();
activity.Window.DecorView.GetWindowVisibleDisplayFrame(rect);
int statusBarHeight = rect.Top;
int width = activity.WindowManager.DefaultDisplay.Width;
int height = activity.WindowManager.DefaultDisplay.Height;
Bitmap screenShotBitmap = Bitmap.CreateBitmap(bitmap, 0, statusBarHeight, width,
height - statusBarHeight);
view.DestroyDrawingCache();
string uri = System.IO.Path.Combine("/sdcard/Download", "screen.jpg");
using (System.IO.FileStream os = new System.IO.FileStream(uri, System.IO.FileMode.Create))
{
screenShotBitmap.Compress(Bitmap.CompressFormat.Png, 100, os);
os.Close();
}
}
我看过许多其他使用 Xamarin.Essentials.Screenshot.CaptureAsync() 的帖子。问题在于它采用最顶层视图的屏幕截图,而不是用户可以看到的内容。
我的问题是,是否可以截取用户可以看到的内容的屏幕截图?如果可以,怎么做?
编辑:
我一直不太清楚我想要达到的目标,所以这里是:
我正在尝试截取 phone 默认屏幕(所有应用程序所在的位置等)以及其他应用程序。因此,为此我使用了前台服务。它有效,但屏幕截图仍然只是应用程序的视图
下面的代码可以获取activity带位图的视图,然后可以将位图保存为图片文件到设备中。
private void takeScreenShot(Activity activity)
{
View view = activity.Window.DecorView;
view.DrawingCacheEnabled = true;
view.BuildDrawingCache();
Bitmap bitmap = view.DrawingCache;
Rect rect = new Rect();
activity.Window.DecorView.GetWindowVisibleDisplayFrame(rect);
int statusBarHeight = rect.Top;
int width = activity.WindowManager.DefaultDisplay.Width;
int height = activity.WindowManager.DefaultDisplay.Height;
Bitmap screenShotBitmap = Bitmap.CreateBitmap(bitmap, 0, statusBarHeight, width,
height - statusBarHeight);
view.DestroyDrawingCache();
string uri = System.IO.Path.Combine("/sdcard/Download", "screen.jpg");
using (System.IO.FileStream os = new System.IO.FileStream(uri, System.IO.FileMode.Create))
{
screenShotBitmap.Compress(Bitmap.CompressFormat.Png, 100, os);
os.Close();
}
}