2016-04-03 95 views
0

私は描画を行うプロジェクトに取り組んでいます。Xamarin Androidスクリーンショットを取得

fillpolygonというクラスで図面を作成し、MainActivityで関数を呼び出すため、私はaxmlを使用しません。自分のプロジェクトでスクリーンショットを撮りたいだけです。 onCreateメソッドで呼び出せる基本関数はありますか?したがって、プログラムが実行されると、自動的にスクリーンショットが取得されます。 Xamarinプラットフォーム以外の回答が見つかりました。

+1

可能性のある重複した[プログラムでのAndroidでスクリーンショットを取る方法は?](http://stackoverflow.com/questions/2661536/how-to-programmatically-take-a-screenshot-in-android) –

答えて

0

あなたのビューでは、スクリーンショットを撮る次のコードを実行できます。私は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; 
} 
+0

@アニキ:編集を参照し、それが役に立つと答えたらマークしてください。 – hvaughan3

+0

一般的にxamarinとandroidには新しいですが、どうすればDrawingCacheEnabledをtrueに設定できますか? VSは現在のコンテキストに「DrawingCacheEnabled」という名前が存在しないことを報告します。 – Lexu

+0

@LexuあなたはXamarin Androidのプロジェクトコードからそれを行う必要があります。下のAmalan Dhananjayanの答えを参照してください。彼は 'view.DrawingCacheEnabled = true;'を設定します。 – hvaughan3

0

このメソッドを使用すると、渡すアクティビティのビットマップが返されます。したがって、基本的にアクティビティから呼び出す場合は、現在のアクティビティとして '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; 
    } 
関連する問題