减少照片的大小

时间:2017-07-06 20:49:22

标签: android sqlite xamarin xamarin.android

我将我的应用程序拍摄的照片记录在sqlite数据库中,我知道不再推荐这些照片我需要将这些照片传输到统一所有应用程序中所有数据的中央数据库。 / p>

我减少和写入sqlite银行的方式就是这样:

 Android.Graphics.Drawables.BitmapDrawable bd = (Android.Graphics.Drawables.BitmapDrawable)imageView.Drawable;
 Bitmap bitmap = bd.Bitmap;
 MemoryStream stream = new MemoryStream();
 bitmap.Compress(Bitmap.CompressFormat.Jpeg, 100, stream);
 byte[] ba = stream.ToArray();
 string bal = Base64.EncodeToString(ba, Base64.Default);

就个人而言,我正在编辑我的问题,因为问题不在我认为可能的选择中,而是在写入数据库时​​。在设备上搜索照片或图像时,上面的代码非常有用。问题是当它为应用程序拍摄照片时,我得到了下面的错误。

我想我需要压缩App.bitmap,它会立即拍摄。我只是不知道该怎么做。正如我所说,上面的代码适用于设备拍摄的照片,但是当我通过我的应用程序拍摄时,我得到了这个错误。

我将发布我的OnActivityResult方法,以便您可以帮我弄清楚这个错误是什么。

错误:

Java.Lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.

在互联网上搜索此错误正在返回,因为光标的大小最大为2MB。

OnActivityResult方法:

  protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
    {
        base.OnActivityResult(requestCode, resultCode, data);

        // Make it available in the gallery
        try
        {
            Intent mediaScanIntent = new Intent(Intent.ActionMediaScannerScanFile);
            Uri contentUri = Uri.FromFile(App._file);
            mediaScanIntent.SetData(contentUri);
            SendBroadcast(mediaScanIntent);

            // Display in ImageView. We will resize the bitmap to fit the display.
            // Loading the full sized image will consume to much memory
            // and cause the application to crash.

            int height = Resources.DisplayMetrics.HeightPixels;
            int width = imageView.Height;
            App.bitmap = App._file.Path.LoadAndResizeBitmap(width, height);
            if (App.bitmap != null)
            {
                imageView.SetImageBitmap(App.bitmap);

                // App.bitmap = null;
            }

            // Dispose of the Java side bitmap.
            GC.Collect();

        }
        catch
        {
        }
        try
        {
            if (resultCode == Result.Ok)
            {
                var imageView =
                FindViewById<ImageView>(Resource.Id.imageView1);
                imageView.SetImageURI(data.Data);



            }
        }
        catch
        {

        }

    }

如果不提取照片,则选择不会返回上面引用的错误。我依靠你的帮助。