0

したがって、基本的に現在のアプリアクティビティのスクリーンショットを撮り、共有する前に画面に表示する関数を作成しようとしていますが、取得する前にスクリーンショットを表示するために使用している画面に到達するとメモリが不足します共有するところまで。

// image naming and path  to include sd card  appending name you choose for file
Java.IO.File dir = new Java.IO.File(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures), "ScreenShots");

if (!dir.Exists())
    dir.Mkdirs();

// create bitmap screen capture
Bitmap bitmap;
View v1 = act.RootView;
v1.DrawingCacheEnabled = true;
bitmap = Bitmap.CreateBitmap(v1.DrawingCache);
v1.DrawingCacheEnabled = false;

string date = DateTime.Now.ToString();

date = date.Replace('/', '-');

Java.IO.File _file = new Java.IO.File(dir, from + date + ".png");
try
{
    using (var stream = System.IO.File.Create(_file.AbsolutePath))
    {
        bitmap.Compress(Android.Graphics.Bitmap.CompressFormat.Png, 100, stream);
        stream.Flush();
        stream.Close();
    }
    bitmap.Dispose();
    v1.Dispose();
}
catch (Java.IO.FileNotFoundException e)
{
    // TODO Auto-generated catch block
    e.PrintStackTrace();
}
catch (Java.IO.IOException e)
{
    // TODO Auto-generated catch block
    e.PrintStackTrace();
}

品質をあまり犠牲にせずにこれを行う良い方法を見つけようとしています。どんな助けでも大歓迎です=]

更新:上記とは対照的に、これを試してみましたが、運もありませんでした。

View v1 = act.RootView;
v1.DrawingCacheQuality = DrawingCacheQuality.Low;
v1.DrawingCacheEnabled = true;
Bitmap bitmap = Bitmap.CreateScaledBitmap(v1.GetDrawingCache(true),720,1280,false);
v1.DrawingCacheEnabled = false;
v1.DestroyDrawingCache();
v1.Dispose();
4

1 に答える 1

0

私は最終的に使用しました:

// create bitmap screen capture
View v1 = act.RootView;
Bitmap bitmap = Bitmap.CreateBitmap(720,1280,Bitmap.Config.Argb8888);
Canvas can = new Canvas(bitmap);
v1.Draw(can);

私の更新されたコードではなく。これにより、必要なスクリーン ショットを取得し、メモリ使用量を抑えることができました。

于 2012-10-08T16:09:03.960 に答える