BitmapImage img = new BitmapImage(new Uri("somepath",UriKind.Relative));
WriteableBitmap wbm = new WriteableBitmap(img);
我在上面的行中收到运行时错误:“对象引用未设置为对象的实例。”
答案 0 :(得分:11)
您获得空引用异常的原因是BitmapImage.CreateOptions Property默认值为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);
};
答案 1 :(得分:6)
如果图像文件的构建操作设置为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访问的。 现在,如果您将文件的构建操作更改为Content而不是Resource,则可以大大简化Uri sintax。
Uri uri = new Uri("Images/image.jpg", UriKind.Relative);
区别,万一你想知道...... 如果导航到Visual Studio项目的Bin / Debug目录并找到包含程序的XAP文件,请将其重命名为ZIP扩展名。看看里面。
在这两种情况下,位图都显然存储在XAP文件中的某个位置。