将字节数组保存为android设备文件夹中的jpg文件

将字节数组保存为android设备文件夹中的jpg文件,android,xamarin,xamarin.android,Android,Xamarin,Xamarin.android,我正在尝试将图像保存在Android设备的文件夹中。我使用的代码如下 var newFolder = AndroidEnvironment.GetExternalStoragePublicDirectory(AndroidEnvironment.DirectoryPictures).AbsolutePath + "/NewFolder"; Directory.CreateDirectory(cameraFolder); byte[] reducedImage = ResizeImageAnd

我正在尝试将图像保存在Android设备的文件夹中。我使用的代码如下

var newFolder = AndroidEnvironment.GetExternalStoragePublicDirectory(AndroidEnvironment.DirectoryPictures).AbsolutePath + "/NewFolder";

Directory.CreateDirectory(cameraFolder);

byte[] reducedImage = ResizeImageAndroid(imageData, 50, 50, 70);

Image image = new Image {Source = ImageSource.FromStream(() => new MemoryStream(reducedImage))};
我想在“newFolder”中将缩小后的图像保存为jpg文件。我不确定我的方向是否正确,如果我将还原图像图像保存为新文件夹中的jpg文件,那就太好了。我正在使用Xamarin,这段代码在Android项目中


我已经检查了post,我不明白那里发生了什么。

使用
目录。CreateDirectory
在公共
图片
目录中创建文件夹,并使用
文件输出流
将字节[]写入文件

例子:
我只想与大家分享我的解决方案,这是我经过一些研究后发现的,效果很好

 var btnSave = FindViewById<Button>(Resource.Id.btnSave);
            btnSave.Click += async delegate
                {
                    if (signature.IsBlank)
                    {
                        // display the base line for the user to sign on.
                        Android.Support.V7.App.AlertDialog.Builder alert = new Android.Support.V7.App.AlertDialog.Builder(this);
                        alert.SetMessage(Resources.GetString(Resource.String.signature_isempty));
                        alert.SetNeutralButton("OK", delegate { });
                        alert.Create().Show();
                    }
                    else
                    {
                        points = signature.Points;
                        try
                        {

                            string nString = String.Format("mySign_{0}.png", Guid.NewGuid());
                            string absolutePath = String.Format("{0}/{1}", Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).ToString(), GetString(Resource.String.app_name).ToString());
                            var filePath = System.IO.Path.Combine(absolutePath, nString);

                            /**

                             You can get base64 and save your database
                            **/
                            /*var img = await signature.GetImageStreamAsync(SignatureImageFormat.Jpeg);
                            var signatureMemoryStream = (MemoryStream)img;
                            byte[] data = signatureMemoryStream.ToArray();
                            string base64img = Convert.ToBase64String(data);
                            Log.Info(NativeConfig.TAG_DROID, base64img.ToString());

                            File.WriteAllBytes(filePath, data);*/

                            var img = await signature.GetImageStreamAsync(SignatureImageFormat.Png, Color.Black, Color.White, true);
                            var ms = (MemoryStream)img;
                            using (FileStream file = new FileStream(filePath, FileMode.Create, System.IO.FileAccess.Write))
                            {
                                byte[] bytes = new byte[ms.Length];
                                ms.Read(bytes, 0, (int)ms.Length);
                                file.Write(bytes, 0, bytes.Length);
                                ms.Close();
                            }

                        }
                        catch (Exception e)
                        {
                            Log.Info(NativeConfig.TAG_DROID, e.Message);
                            Toast.MakeText(this, "No se pudo guardar", ToastLength.Short).Show();
                        }
                    }
                };
            btnSave.Dispose();
var btnSave=findviewbyd(Resource.Id.btnSave);
btnSave.Click+=异步委托
{
如果(签名为空)
{
//显示供用户登录的基线。
Android.Support.V7.App.AlertDialog.Builder alert=新的Android.Support.V7.App.AlertDialog.Builder(此);
SetMessage(Resources.GetString(Resource.String.signature_isempty));
SetNeutralButton(“确定”,委托{});
alert.Create().Show();
}
其他的
{
点数=签名点数;
尝试
{
string nString=string.Format(“mySign_{0}.png”,Guid.NewGuid());
string absolutePath=string.Format(“{0}/{1}”,Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).ToString(),GetString(Resource.string.app_name).ToString();
var filePath=System.IO.Path.Combine(绝对路径,nString);
/**
您可以获取base64并保存数据库
**/
/*var img=wait signature.GetImageStreamAsync(SignatureImageFormat.Jpeg);
var signatureMemoryStream=(MemoryStream)img;
字节[]数据=signatureMemoryStream.ToArray();
string base64img=Convert.ToBase64String(数据);
Log.Info(NativeConfig.TAG_DROID,base64img.ToString());
File.writealBytes(文件路径、数据)*/
var img=wait signature.GetImageStreamAsync(SignatureImageFormat.Png,Color.Black,Color.White,true);
var ms=(MemoryStream)img;
使用(FileStream file=newfilestream(filePath,FileMode.Create,System.IO.FileAccess.Write))
{
字节[]字节=新字节[ms.Length];
ms.Read(字节,0,(int)ms.Length);
file.Write(字节,0,字节.长度);
Close女士();
}
}
捕获(例外e)
{
Log.Info(NativeConfig.TAG_DROID,e.Message);
Toast.MakeText(这个“No se pudo guardar”,ToastLength.Short).Show();
}
}
};
btnSave.Dispose();

我修改了示例页面中的代码,并添加了。

来编写字节数组,只需使用File.writealBytes(path);谢谢Jason,我知道,但我想在你的示例中保存一个图像(jpg),reducedImage是一个字节[]是的,你是对的Jason,这可能会造成混乱再次感谢
 var btnSave = FindViewById<Button>(Resource.Id.btnSave);
            btnSave.Click += async delegate
                {
                    if (signature.IsBlank)
                    {
                        // display the base line for the user to sign on.
                        Android.Support.V7.App.AlertDialog.Builder alert = new Android.Support.V7.App.AlertDialog.Builder(this);
                        alert.SetMessage(Resources.GetString(Resource.String.signature_isempty));
                        alert.SetNeutralButton("OK", delegate { });
                        alert.Create().Show();
                    }
                    else
                    {
                        points = signature.Points;
                        try
                        {

                            string nString = String.Format("mySign_{0}.png", Guid.NewGuid());
                            string absolutePath = String.Format("{0}/{1}", Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).ToString(), GetString(Resource.String.app_name).ToString());
                            var filePath = System.IO.Path.Combine(absolutePath, nString);

                            /**

                             You can get base64 and save your database
                            **/
                            /*var img = await signature.GetImageStreamAsync(SignatureImageFormat.Jpeg);
                            var signatureMemoryStream = (MemoryStream)img;
                            byte[] data = signatureMemoryStream.ToArray();
                            string base64img = Convert.ToBase64String(data);
                            Log.Info(NativeConfig.TAG_DROID, base64img.ToString());

                            File.WriteAllBytes(filePath, data);*/

                            var img = await signature.GetImageStreamAsync(SignatureImageFormat.Png, Color.Black, Color.White, true);
                            var ms = (MemoryStream)img;
                            using (FileStream file = new FileStream(filePath, FileMode.Create, System.IO.FileAccess.Write))
                            {
                                byte[] bytes = new byte[ms.Length];
                                ms.Read(bytes, 0, (int)ms.Length);
                                file.Write(bytes, 0, bytes.Length);
                                ms.Close();
                            }

                        }
                        catch (Exception e)
                        {
                            Log.Info(NativeConfig.TAG_DROID, e.Message);
                            Toast.MakeText(this, "No se pudo guardar", ToastLength.Short).Show();
                        }
                    }
                };
            btnSave.Dispose();