Как открыть файл из «внешнего» хранилища Android, прочитать это изображение в растровом объекте и вернуть - PullRequest
0 голосов
/ 13 февраля 2019

Я использую камеру camera2 в Android для захвата изображения и сохранения его на моем телефоне во «внешнем» хранилище.Я поставил внешний в кавычки, потому что, хотя Android называет внешнее хранилище, место хранения по-прежнему находится на телефоне, а не на SD-карте или физическом внешнем запоминающем устройстве.Однако следующий шаг в моем проекте - сохранить только что захваченное изображение в базе данных Microsoft SQL Server.Я пытаюсь преобразовать изображение в растровое изображение, чтобы его можно было сохранить в базе данных.

Я пытался использовать этот код ниже, но у него есть несколько недостатков.Я жестко программирую размер файла (который даже не является точным размером файла), и я читаю байты из картинки, но не сохраняю их в растровом объекте.

public System.IO.Stream GetPictureFromFile () {

        try
        {
            var file = Android.OS.Environment.GetExternalStoragePublicDirectory("/RAW_2019_01_24_16_55_11_638.dng");
            System.IO.Stream openStream = System.IO.File.Open(file.AbsolutePath, System.IO.FileMode.Open);



            System.IO.FileStream fs = System.IO.File.Create("/storage/emulated/0/image.dng");
            for (int i = 0; i < 2500; i++)//Replace Hardcoded filelength
            {
                fs.WriteByte((byte)openStream.ReadByte());
            }



            openStream = Assets.Open("/storage/emulated/0/image.dng");
            openStream.Close();

            return openStream;
        }
        catch (Exception ex)
        {

            throw ex;
        }

    }

Этот код завершается ошибкой при попытке открыть вновь созданный файл "image.dng" и сохранить его в объекте потока "openStream",Я хотел бы найти способ избежать использования объекта openStream и сохранять данные непосредственно в объект растрового изображения.

...