Как загрузить ImageView из файла png?

Я делаю снимок на камеру, используя

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
startActivityForResult( intent, 22 );

Когда действие завершается, я записываю растровое изображение в файл PNG.

    java.io.FileOutputStream out = openFileOutput("myfile.png", Context.MODE_PRIVATE);
    bmp.compress(Bitmap.CompressFormat.PNG, 90, out);

Все идет нормально, и я вижу, что файл создан в моем личном пространстве данных приложения.

У меня возникли трудности, когда я позже захочу отобразить это изображение с помощью ImageView.

Может ли кто-нибудь предложить код для этого?

Если я попытаюсь создать файл с разделителями путей, это не удастся. Если я попытаюсь создать Uri из имени без разделителей, это не удастся.

Я могу открыть файл ОК, используя:

        java.io.FileInputStream in = openFileInput("myfile.png");

Но это не дает мне Uri, который мне нужен для установки изображения с помощью

   iv.setImageURI(u)

Резюме: у меня есть изображение в файле png в данных частного приложения. Какой код для установки этого в ImageView?

Спасибо.


person Peter vdL    schedule 22.04.2010    source источник


Ответы (5)


Попробуйте BitmapFactory.decodeFile(), а затем setImageBitmap() на ImageView.

person CommonsWare    schedule 22.04.2010
comment
Спасибо, да, это сработало. Единственное, на что нужно обратить внимание, это то, что вы bmp.Compress его в файл, давая только имя файла. Но чтобы декодировать тот же файл, вы должны создать и предоставить полное имя пути. В Android есть несколько таких необдуманных асимметрий. Строка fname = c.getFilesDir (). GetAbsolutePath () + / myfile.png; Bitmap bm = BitmapFactory.decodeFile (fname); iv.setImageBitmap (bm); - person Peter vdL; 22.04.2010
comment
Чтобы избежать слишком больших OOM и растровых изображений для загрузки в текстуры, ошибки: разработчик .android.com / training / displaying-bitmaps / - person Adam; 04.04.2013
comment
Работает на меня! Большое тебе спасибо! @CommonsWare Как вы думаете, могли бы вы мне помочь с этим вопросом goo.gl/wO9G2N - person eddy; 15.09.2014
comment
В каком каталоге должен находиться файл? - person xjcl; 23.05.2020

Также возможно:

java.io.FileInputStream in = openFileInput("myfile.png");
iv.setImageBitmap(BitmapFactory.decodeStream(in));
person Apc    schedule 24.04.2010

Почему не так:

ImageView MyImageView = (ImageView)findViewById(R.id.imageView1);
Drawable d = Drawable.createFromPath( PATH TO FILE );
MyImageView.setImageDrawable(d);
person Bernd    schedule 14.04.2013

Не должно быть разницы между decodeStream() и decodeFile(). decodeFile() открывает поток ввода и вызывает decodeStream(). Ответ на этот вопрос уже был дан по этой ссылке

person Alvaro    schedule 17.07.2013

person    schedule
comment
Пожалуйста, уточните свой ответ (словами), а не просто укажите одну строку кода. - person JLRishe; 21.05.2014