我正在一個項目,使繪圖。Xamarin Android採取截圖
我不使用axml,因爲我在名爲filledpolygon的類中繪製了圖形,並在MainActivity中調用該函數。我只想在我的項目中截圖。有沒有基本的功能,我可以在onCreate方法中調用?所以,當程序運行時,它會自動截取屏幕截圖。我找到了除Xamarin平臺之外的答案。
我正在一個項目,使繪圖。Xamarin Android採取截圖
我不使用axml,因爲我在名爲filledpolygon的類中繪製了圖形,並在MainActivity中調用該函數。我只想在我的項目中截圖。有沒有基本的功能,我可以在onCreate方法中調用?所以,當程序運行時,它會自動截取屏幕截圖。我找到了除Xamarin平臺之外的答案。
在您的視圖中,您可以運行以下代碼,它將截取屏幕截圖。我還沒有嘗試在OnCreate()
之前運行它,因此您可能需要測試以確保視圖已完全呈現。
*編輯:根據this post您可能在OnCreate()
中運行此代碼時遇到問題,因此您需要找到一個更好的位置。我無法弄清楚用戶在他發佈的鏈接中指的是什麼。
*編輯#2:剛剛發現Compress()
由於PNG是無損的,因此未考慮質量參數(在下面列出爲0
),但如果將格式更改爲JPEG格式,則可能需要因爲你的圖像看起來像垃圾,所以調出質量參數。
public byte[] SaveImage() {
DrawingCacheEnabled = true; //Enable cache for the next method below
Bitmap bitmap = GetDrawingCache(true); //Gets the image from the cache
byte[] bitmapData;
using(MemoryStream stream = new MemoryStream()) {
bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
bitmapData = stream.ToArray();
}
return bitmapData;
}
您可以使用此方法,該方法將返回您傳遞的活動的位圖。所以基本上,如果你是從自己的活動調用,那麼你可以簡單地通過'this'作爲當前活動來獲取截圖作爲位圖。 此外,我添加了一個小的修改,從屏幕截圖中刪除狀態欄。希望你明白了。
private Bitmap 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();
return screenShotBitmap;
}
的可能的複製[如何編程採取Android的截圖?](http://stackoverflow.com/questions/2661536/how-to-programmatically-take-a-screenshot-in-android) –