BitmapImage img = new BitmapImage(new Uri("somepath",UriKind.Relative));
WriteableBitmap wbm = new WriteableBitmap(img);
Run Code Online (Sandbox Code Playgroud)
我在上面的行中收到运行时错误:"对象引用未设置为对象的实例."
Zab*_*sky 11
获得null引用异常的原因是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);
};
Run Code Online (Sandbox Code Playgroud)
如果图像文件的构建操作设置为资源,则以下代码将起作用.
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);
Run Code Online (Sandbox Code Playgroud)
请注意,资源由应用程序类定义的静态方法GetResourceStream访问.现在,如果您将文件的构建操作更改为Content而不是Resource,则可以大大简化Uri sintax.
Uri uri = new Uri("Images/image.jpg", UriKind.Relative);
Run Code Online (Sandbox Code Playgroud)
区别在于,如果您想知道...如果您导航到Visual Studio项目的Bin/Debug目录并找到包含您的程序的XAP文件,请将其重命名为ZIP扩展名.看看里面.
在这两种情况下,位图都显然存储在XAP文件中的某个位置.