在 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?