Создание изображений из встроенного ресурса - PullRequest
5 голосов
/ 08 сентября 2011

Это сводило меня с ума в течение последних 2 дней, и что-то близкое, что я нахожу, просто не работает в моей ситуации, возможно, кто-то может указать на то, что я делаю неправильно.

У меня есть проект WPF, в который я включил довольно большое количество изображений (80-е). Я добавил их в проект в папку «Изображения». В настоящее время они настроены как встроенные ресурсы (хотя я также пробовал обычные ресурсы), но, похоже, ничего не работает.

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

private void addPicture(string name)
{            
    string filePath = "pack://MyApp_WPF:,,,/Images/" + name + ".png";
    Stream imageStream = assembly.GetManifestResourceStream(filePath);

    Image curImage = new Image();
    BitmapImage bmpImage = new BitmapImage();
    bmpImage.BeginInit();
    bmpImage.UriSource = new Uri(filePath, UriKind.Relative);
    bmpImage.EndInit();
    curImage.Height = 60;
    curImage.Stretch = Stretch.Uniform;
    curImage.Source = bmpImage;
    curImage.Margin = new Thickness(5);

    imageList.Add(curImage);
}

Это было намного проще сделать в моем приложении для Windows Form, но я просто не могу понять это с помощью WPF ... Любая помощь, кроме ссылок на ресурсы, была бы полезной, потому что в этот момент я уже прочитал их.

Ответы [ 2 ]

5 голосов
/ 08 сентября 2011

Первое, на что нужно обратить внимание, - это событие DownloadError, на которое вы должны подписаться, это может объяснить, что происходит и почему (хотя иногда сообщение об ошибке довольно общее);во-вторых, вам может не понадобиться конструкция pack:// URI с действиями построения образов Resource:

var bmpImage = new BitmapImage(new Uri(
    string.Format("/Images/{0}.png", name", UriKind.Relative));
3 голосов
/ 08 сентября 2011

URI Pack неверен, когда вы называете свою сборку, вы должны поместить полномочия, в этом случае application, т.е.

string filePath = "pack://application:,,,/Images/" + name + ".png";
...