在 windows phone 8.1 中将 Base64String 图像显示为 MapIcon 图像
Posted
技术标签:
【中文标题】在 windows phone 8.1 中将 Base64String 图像显示为 MapIcon 图像【英文标题】:Show Base64String image as MapIcon image in windows phone 8.1 【发布时间】:2016-01-10 04:56:20 【问题描述】:我将图像转换为 base64 字符串并保存到 SQLite 数据库。我想在地图中显示该图像。
用于将字符串转换为图像的代码
public static BitmapImage Base64StringToBitmap(string source)
var ims = new InMemoryRandomAccessStream();
var bytes = Convert.FromBase64String(source);
var dataWriter = new DataWriter(ims);
dataWriter.WriteBytes(bytes);
dataWriter.StoreAsync();
ims.Seek(0);
var img = new BitmapImage();
img.SetSource(ims);
return img;
如何在地图中显示此图像。显示图钉
private void loadPushpin(object sender, RoutedEventArgs e)
using (var dbConn = new SQLiteConnection(App.DB_PATH))
var query = dbConn.Table<Contacts>();
var result = query.ToList();
foreach (var item in result)
Contacts obj = new Contacts();
MapIcon MapIcon1 = new MapIcon();
MapIcon1.Image = RandomAccessStreamReference.CreateFromUri(new Uri(""));
MapIcon1.Location = new Geopoint(new BasicGeoposition()
Latitude = Convert.ToDouble(item.Latitude),
Longitude = Convert.ToDouble(item.Longitude)
);
MapIcon1.NormalizedAnchorPoint = new Point(0.5, 1.0);
MapIcon1.Title = item.Name;
MyLocationMap.MapElements.Add(MapIcon1);
【问题讨论】:
【参考方案1】:尝试使用 CreateFromStream 并传递 InMemboryRandomeAccessStream 而不是 CreateFromUri。下面是代码
var ims = new InMemoryRandomAccessStream();
var bytes = Convert.FromBase64String(source);
var dataWriter = new DataWriter(ims);
dataWriter.WriteBytes(bytes);
dataWriter.StoreAsync();
ims.Seek(0);
var img = new BitmapImage();
img.SetSource(ims);
return img;
MapIcon MapIcon1 = new MapIcon();
MapIcon1.Image = RandomAccessStreamReference.CreateFromStream(ims);;
更新
private async void loadPushpin(object sender, RoutedEventArgs e)
using (var dbConn = new SQLiteConnection(App.DB_PATH))
var query = dbConn.Table<Contacts>();
var result = query.ToList();
foreach (var item in result)
Contacts obj = new Contacts();
MapIcon1.Location = new Geopoint(new BasicGeoposition()
Latitude = Convert.ToDouble(item.Latitude),
Longitude = Convert.ToDouble(item.Longitude)
);
var ims = new InMemoryRandomAccessStream();
var bytes = Convert.FromBase64String(item.ImageString);//set your image base 64 string here...
var dataWriter = new DataWriter(ims);
dataWriter.WriteBytes(bytes);
await dataWriter.StoreAsync();
ims.Seek(0);
MapIcon MapIcon1 = new MapIcon();
MapIcon1.Image = RandomAccessStreamReference.CreateFromStream(ims);
MapIcon1.NormalizedAnchorPoint = new Point(0.5, 1.0);
MapIcon1.Title = item.Name;
MyLocationMap.MapElements.Add(MapIcon1);
【讨论】:
你能解释一下如何做到这一点。我在问题中更新了我的代码 感谢它完美运行。一件小事,我怎样才能改变图像属性(图像的大小)。 您无法更改 mapIcon 图像的大小,因为它是 Stream。在这种情况下,在您的数据库中使用更小或更大的图像。以上是关于在 windows phone 8.1 中将 Base64String 图像显示为 MapIcon 图像的主要内容,如果未能解决你的问题,请参考以下文章
可以运行 2 个后台任务 - Windows Phone 8.1 通用应用程序?
适用于 Windows Phone 8.1 的后台媒体播放器中的无缝循环
csharp 在Windows 8.1和Windows Phone 8.1应用程序中运行的Expander控件的代码隐藏。
使用 Windows RT 的客户端证书(windows 8.1/windows phone 8.1)
当 Windows (phone) 8.1 应用程序在前台时接收并处理通知参数
如何将 Windows 商店中的 Windows Phone 应用程序(8.1 XAML)迁移到 8.1 Silverlight?