#c# #silverlight
#c# #silverlight
Вопрос:
BitmapImage img = new BitmapImage(new Uri("somepath",UriKind.Relative));
WriteableBitmap wbm = new WriteableBitmap(img);
Я получаю ошибку времени выполнения в строке выше: «Ссылка на объект не установлена для экземпляра объекта».
Комментарии:
1. Является ли «path» допустимым путем к файлу? Для действия сборки файла установлено значение «Содержимое» или «Ресурс»?
2. путь правильный, и изображение инициализировано.
Ответ №1:
Причина, по которой вы получаете исключение с нулевой ссылкой, заключается в том, что BitmapImage.Свойство CreateOptions имеет значение по умолчанию BitmapCreateOptions.DelayCreation
. Вы можете установить для него значение BitmapCreateOptions.None
и создать WriteableBitmap
после загрузки изображения:
BitmapImage img = new BitmapImage(new Uri("somepath",UriKind.Relative));
img.CreateOptions = BitmapCreateOptions.None;
img.ImageOpened = (s, e) =>
{
WriteableBitmap wbm = new WriteableBitmap((BitmapImage)s);
};
Ответ №2:
Если для действия сборки вашего файла изображения установлено значение resource, то следующий код будет работать.
Uri uri = new Uri("/ProjectName;component/Images/image.jpg", UriKind.Relative);
StreamResourceInfo resourceInfo = Application.GetResourceStream(uri);
BitmapImage img = new BitmapImage();
img.SetSource(resourceInfo.Stream);
WriteableBitmap wbm = new WriteableBitmap(img);
Обратите внимание, что доступ к ресурсу осуществляется с помощью статического метода GetResourceStream, определенного классом application.
Теперь, если вы измените действие сборки файла на Content, а не на Resource, вы можете значительно упростить синтаксис Uri.
Uri uri = new Uri("Images/image.jpg", UriKind.Relative);
Разница, если вам интересно…
Если вы перейдете в каталог Bin / Debug проекта Visual Studio и найдете файл XAP, содержащий вашу программу, переименуйте его в ZIP с расширением. И загляни внутрь.
В обоих случаях растровое изображение, очевидно, хранится где-то в файле XAP.
- При выполнении действия сборки ресурса для файла он сохраняется внутри DLL-файла вместе со скомпилированной программой.
- При выполнении действия сборки содержимого файл сохраняется вне файла dll, но внутри файла XAP, и когда вы переименовываете файл XAP в ZIP-файл, вы можете его увидеть.