Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将布局保存到位图(Xamarin)_C#_Android_Xamarin_Bitmap_Xamarin.android - Fatal编程技术网

C# 将布局保存到位图(Xamarin)

C# 将布局保存到位图(Xamarin),c#,android,xamarin,bitmap,xamarin.android,C#,Android,Xamarin,Bitmap,Xamarin.android,我有布局,需要保存到位图 这是代码 public void Save() { LinearLayout view = FindViewById<LinearLayout>(Resource.Id.badge); view.DrawingCacheEnabled = true; view.BuildDrawingCache(); Bitmap layout = view.GetDrawingCache(true); } 一切正常,位图2正在返回 但

我有布局,需要保存到位图

这是代码

public void Save()
{
    LinearLayout view = FindViewById<LinearLayout>(Resource.Id.badge);

    view.DrawingCacheEnabled = true;
    view.BuildDrawingCache();
    Bitmap layout = view.GetDrawingCache(true);

}
一切正常,位图2正在返回

但我还需要将其保存到SD

我是这样写的

public  Bitmap CreateBitmapFromView(View view, bool autoScale = true)
    {
        var wasDrawingCacheEnabled = view.DrawingCacheEnabled;
        view.DrawingCacheEnabled = true;
        view.BuildDrawingCache(autoScale);
        var bitmap2 = view.GetDrawingCache(autoScale);
        view.DrawingCacheEnabled = wasDrawingCacheEnabled;
        return bitmap2;

    }
public  Bitmap CreateBitmapFromView(View view, bool autoScale = true)
    {
        var wasDrawingCacheEnabled = view.DrawingCacheEnabled;
        view.DrawingCacheEnabled = true;
        view.BuildDrawingCache(autoScale);
        var bitmap2 = view.GetDrawingCache(autoScale);
        view.DrawingCacheEnabled = wasDrawingCacheEnabled;
        var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
        var filePath = System.IO.Path.Combine(sdCardPath, "test.png");
        var stream = new FileStream(filePath, FileMode.Create);
        bitmap2.Compress(Bitmap.CompressFormat.Png, 100, stream);
        return bitmap2;

    }
并且有这个错误

对象引用未设置为对象的实例


将其更改为以下内容:

public Bitmap CreateBitmapFromView(View view, bool autoScale = true)
{
    var wasDrawingCacheEnabled = view.DrawingCacheEnabled;
    view.DrawingCacheEnabled = true;
    view.BuildDrawingCache(autoScale);
    var bitmap = view.GetDrawingCache(autoScale);
    view.DrawingCacheEnabled = wasDrawingCacheEnabled;
    return bitmap;
}
更新

尝试将
var bitmap2
定义为全局变量

public  Bitmap CreateBitmapFromView(View view, bool autoScale = true)
    {
        var wasDrawingCacheEnabled = view.DrawingCacheEnabled;
        view.DrawingCacheEnabled = true;
        view.BuildDrawingCache(autoScale);
        view.DrawingCacheEnabled = wasDrawingCacheEnabled;
        var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
        var filePath = System.IO.Path.Combine(sdCardPath, "test.png");
        var stream = new FileStream(filePath, FileMode.Create);
        bitmap2.Compress(Bitmap.CompressFormat.Png, 100, stream);
        return bitmap2;
    }

以及程序如何理解需要保存为btmap的布局?
public Bitmap CreateBitmapFromView(View-View,bool autoScale=true)
您可以在该方法中传递视图参数,因此我在方法中的视图将显示此
LinearLayout-View=FindViewById(Resource.Id.badge)我将传递线性布局?您可以将该视图传递给我在答案中编写的方法好的,我理解。还有一个问题,我需要将位图保存到SD我有代码
var sdCardPath=Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;var filePath=System.IO.Path.Combine(sdCardPath,“test.png”);var stream=newfilestream(filePath,FileMode.Create);bitmap2.Compress(Bitmap.CompressFormat.Png,100,流);stream.Close()如何从您的方法保存位图?