私は描画を行うプロジェクトに取り組んでいます。Xamarin Androidスクリーンショットを取得
fillpolygonというクラスで図面を作成し、MainActivityで関数を呼び出すため、私はaxmlを使用しません。自分のプロジェクトでスクリーンショットを撮りたいだけです。 onCreateメソッドで呼び出せる基本関数はありますか?したがって、プログラムが実行されると、自動的にスクリーンショットが取得されます。 Xamarinプラットフォーム以外の回答が見つかりました。
私は描画を行うプロジェクトに取り組んでいます。Xamarin Androidスクリーンショットを取得
fillpolygonというクラスで図面を作成し、MainActivityで関数を呼び出すため、私はaxmlを使用しません。自分のプロジェクトでスクリーンショットを撮りたいだけです。 onCreateメソッドで呼び出せる基本関数はありますか?したがって、プログラムが実行されると、自動的にスクリーンショットが取得されます。 Xamarinプラットフォーム以外の回答が見つかりました。
あなたのビューでは、スクリーンショットを撮る次のコードを実行できます。私はOnCreate()
で実行しようとしていませんでした。そのため、ビューが完全にレンダリングされていることを確認する必要があります。
*編集:this postによれば、このコードをOnCreate()
で実行すると問題が発生する可能性がありますので、より良い場所を見つける必要があります。彼が投稿したリンクの中で、ユーザーがどの投稿を参照していたのか分かりませんでした。
* [編集]#2:ちょうどPNGはロスレスであるため、Compress()
は、アカウントに(以下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;
}
@アニキ:編集を参照し、それが役に立つと答えたらマークしてください。 – hvaughan3
一般的にxamarinとandroidには新しいですが、どうすればDrawingCacheEnabledをtrueに設定できますか? VSは現在のコンテキストに「DrawingCacheEnabled」という名前が存在しないことを報告します。 – Lexu
@LexuあなたはXamarin Androidのプロジェクトコードからそれを行う必要があります。下のAmalan Dhananjayanの答えを参照してください。彼は 'view.DrawingCacheEnabled = true;'を設定します。 – hvaughan3
このメソッドを使用すると、渡すアクティビティのビットマップが返されます。したがって、基本的にアクティビティから呼び出す場合は、現在のアクティビティとして '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) –