将imageview中的一张图片保存到内存中

Save an image in imageview to the internal memory

我读取代码并将其转换为条形码并将条形码作为图像放入其中 imageview.

下一步,我想将imageview中的图片保存到内存中。

我试过了,没用。

  Bitmap bmp = ((BitmapDrawable)imageView.Drawable).Bitmap;

              if (bmp != null)
              {
                  byte[] reducedImage = btarry.GetImageStreamAsBytes(bmp);

                  var filename = System.IO.Path.Combine(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures).ToString(), "NewFolder");

                  if (!System.IO.Directory.Exists(filename))
                  {
                      System.IO.Directory.CreateDirectory(filename);
                  }

                  filename = System.IO.Path.Combine(System.DateTime.Now.ToString("yyyyMMddHHmmssfff"), "qrcode.jpg");
                  using (var fileOutputStream = new FileOutputStream(filename))
                  {
                      await fileOutputStream.WriteAsync(reducedImage);
                  }

                  if (bmp != null)
                  {
                      bmp.Recycle();
                      bmp = null;
                  }
                 
              }

首先,您可以使用 bmp.Compress() 来保存它而不是流和字节数组列表。此外,ExternalStorageDirectory returns 你的外部存储的根路径,将在 API 29 中弃用。最后,你使用了两次 Path.Combine,第二次将取代第一次。您可以使用以下代码保存图像,它会创建一个以时间命名的文件夹。

 Bitmap bmp = ((BitmapDrawable)imageview.Drawable).Bitmap;
             if (bmp != null)
             {
                 
                 var filename1 = Android.App.Application.Context.GetExternalFilesDir(System.DateTime.Now.ToString("yyyyMMddHHmmssfff")).AbsolutePath;
                 var filename = System.IO.Path.Combine(filename1,  "qrcode.jpg");
                 using (System.IO.FileStream os = new System.IO.FileStream(filename, System.IO.FileMode.Create))
                 {
                     bmp.Compress(Bitmap.CompressFormat.Png, 100, os);
                     os.Close();
                 }
                 if (bmp != null)
                 {
                     bmp.Recycle();
                     bmp = null;
                 }

             }