UWP开发中如何从图像资源获取IRandomAccessStreamReference?
UWP项目图像资源生成MapIcon所需IRandomAccessStreamReference的方案
前置准备
首先确认项目中目标图像文件的配置:
在Visual Studio的解决方案资源管理器中选中图像文件,右键打开「属性」面板,设置两项参数:
- 生成操作:内容
- 复制到输出目录:如果较新则复制
实现方法
方案1:通过资源Uri直接创建(最简方案)
直接使用RandomAccessStreamReference.CreateFromUri静态方法读取应用内资源,无需异步操作:
// 引入必要命名空间 using Windows.Storage.Streams; using Windows.UI.Xaml.Controls.Maps; using Windows.Devices.Geolocation; // 构造资源Uri,ms-appx:/// 对应应用安装根目录 Uri iconResourceUri = new Uri("ms-appx:///Assets/你的图标文件名.png"); IRandomAccessStreamReference iconStreamRef = RandomAccessStreamReference.CreateFromUri(iconResourceUri); // 赋值给MapIcon MapIcon customMapIcon = new MapIcon() { Location = new Geopoint(new BasicGeoposition() { Latitude = 目标纬度, Longitude = 目标经度 }), Image = iconStreamRef, // 锚点设置为图标底部中心,让标记点精准对准经纬度坐标 NormalizedAnchorPoint = new Windows.Foundation.Point(0.5, 1) };
方案2:通过存储文件创建(适合需要预处理图像的场景)
如果需要先对图像做裁剪、缩放等处理,可先读取存储文件再生成流引用:
using Windows.Storage; // 异步获取资源文件 StorageFile iconFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/你的图标文件名.png")); IRandomAccessStreamReference iconStreamRef = RandomAccessStreamReference.CreateFromFile(iconFile);
注意事项
- 资源Uri必须使用
ms-appx:///前缀(三个斜杠),如果图像存放在子目录,需要补全路径,例如存放在Assets/MapIcons目录下的图标,Uri为ms-appx:///Assets/MapIcons/xxx.png - 建议使用带透明通道的PNG格式图像,尺寸控制在6464或128128,过大会导致地图渲染卡顿
- 必须设置
NormalizedAnchorPoint属性,默认值为(0,0)即图标左上角对齐坐标点,不符合常规标记使用逻辑
内容的提问来源于stack exchange,提问作者Flarosa
相关产品推荐
相关产品推荐

