C# 在windows phone 8.1中将Base64字符串图像显示为MapIcon图像
我将图像转换为base64字符串并保存到SQLite数据库。我想在地图上显示那个图像 用于将字符串转换为图像的代码C# 在windows phone 8.1中将Base64字符串图像显示为MapIcon图像,c#,geolocation,windows-phone-8.1,C#,Geolocation,Windows Phone 8.1,我将图像转换为base64字符串并保存到SQLite数据库。我想在地图上显示那个图像 用于将字符串转换为图像的代码 public static BitmapImage Base64StringToBitmap(string source) { var ims = new InMemoryRandomAccessStream(); var bytes = Convert.FromBase64String(source); var da
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);
}
}
}
private void loadPushpin(对象发送器,路由目标e)
{
使用(var dbConn=newsqliteconnection(App.DB_PATH))
{
var query=dbConn.Table();
var result=query.ToList();
foreach(结果中的var项目)
{
触点obj=新触点();
MapIcon MapIcon1=新MapIcon();
MapIcon1.Image=RandomAccessStreamReference.CreateFromUri(新Uri(“”);
MapIcon1.Location=新的地质点(新的基本地理位置()
{
纬度=换算到双倍(项目纬度),
经度=Convert.ToDouble(item.Longitude)
});
MapIcon1.NormalizedAnchorPoint=新点(0.5,1.0);
MapIcon1.Title=项.Name;
MyLocationMap.MapElements.Add(MapIcon1);
}
}
}
尝试使用CreateFromStream并传入MemboryRandomeAccessStream而不是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);
}
}
}
private async void loadPushpin(对象发送方,RoutedEventArgs e)
{
使用(var dbConn=newsqliteconnection(App.DB_PATH))
{
var query=dbConn.Table();
var result=query.ToList();
foreach(结果中的var项目)
{
触点obj=新触点();
MapIcon1.Location=新的地质点(新的基本地理位置()
{
纬度=换算到双倍(项目纬度),
经度=Convert.ToDouble(item.Longitude)
});
var ims=新的InMemoryRandomAccessStream();
var bytes=Convert.FromBase64String(item.ImageString);//在此处设置图像的base 64字符串。。。
var dataWriter=新的dataWriter(ims);
dataWriter.WriteBytes(字节);
等待dataWriter.StoreAsync();
ims.Seek(0);
MapIcon MapIcon1=新MapIcon();
MapIcon1.Image=RandomAccessStreamReference.CreateFromStream(ims);
MapIcon1.NormalizedAnchorPoint=新点(0.5,1.0);
MapIcon1.Title=项.Name;
MyLocationMap.MapElements.Add(MapIcon1);
}
}
}
你能解释一下怎么做吗。我更新了问题中的代码,谢谢,它工作得很好。一件小事,我如何更改图像属性(图像的大小)。您不能更改mapIcon图像的大小,因为它是流。在这种情况下,在数据库中使用samller或更大的图像。