Определение пути для чтения изображения из ресурсов в моно для Android - PullRequest
1 голос
/ 14 января 2012

Я пытаюсь прочитать картинку, передав местоположение файла. Я знаю, что могу получить изображение из каталога resources / drawable с помощью Resource.Id. Тем не менее, у меня будет немного спокойных картинок, поэтому вместо того, чтобы делать большое заявление переключателя (и получить правильное), я бы хотел прочитать картинку по имени.

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

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

var imageView = FindViewById<ImageView>(Resource.Id.test_image);
var file = new Java.IO.File("Resources/Drawable/logo.png");
var drawableLogo = Android.Graphics.Drawables.Drawable.CreateFromPath(file.AbsolutePath);
imageView.SetImageDrawable(drawableLogo);

Чтобы ответить на мой вопрос ...

Похоже, я должен был поместить картинку в папку Assets (с действием сборки "AndroidAsset")

Затем, чтобы прочитать это, я просто использую метод Open для Активов:

var imageView = FindViewById<ImageView>(Resource.Id.test_image);
var inputStream = Assets.Open("logo.png");
var bMap = BitmapFactory.DecodeStream(inputStream);
imageView.SetImageBitmap(bMap);

Ответы [ 2 ]

4 голосов
/ 14 января 2012

Один из вариантов - поиск ресурса по его имени:

int id = Resources.GetIdentifier("drawable/icon", null, PackageName);
imageView.SetImageResource(id);

Хотя это не очень хорошее решение. С одной стороны, это будет медленнее, чем прямой доступ к ресурсу по его идентификатору. Также вам нужно будет использовать Java-версию имени ресурса (например, Icon переводится в icon). В общем, я бы не рекомендовал это делать.

Лучший вариант - сохранить все изображения в качестве активов, установив для их BuildAction значение AndroidAsset. Тогда вы можете сделать что-то вроде этого:

var drawable = Drawable.CreateFromStream(Assets.Open("Icon.png", Access.Streaming), null);
imageView.SetImageDrawable(drawable);
1 голос
/ 14 января 2012

Возможно, вы хотите использовать свойство Context.Resources, если вы находитесь в Activity или что-то в этом роде:

var logo = Resources.GetDrawable (Resource.Drawable.Logo)

Таким образом, вам не нужно беспокоиться о том, где на самом деле хранится изображение.

...