首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FrameworkElement到图像

FrameworkElement到图像
EN

Stack Overflow用户
提问于 2022-08-01 09:40:50
回答 1查看 54关注 0票数 0

我正在尝试将Telerik地图转换为Image。

Telerik有一个用于视图中创建的地图的ExportToImage方法。

但是在这种情况下,我动态地创建一个地图,而不是在视图中。

当我使用PrintVisual时,我能很好地看到地图,

但是当我使用各种方法将FrameworkElement转换成图像时,

包括Telerik的ExportToImage,我只得到了地图中各层的图片。

代码语言:javascript
复制
private void LocationsToImage(ICollection<LocationType> locationCollection, Size size)
{
    var map = new RadMap
    {
        Language = XmlLanguage.GetLanguage(CultureInfo.DefaultThreadCurrentCulture.Name),
        Width = size.Width,
        Height = size.Height
    };
    var layer = new InformationLayer();
    map.Items.Add(layer);
    MapHelper.DrawLocations(map, layer, locationCollection);

    //print 
    map.Arrange(new Rect(size));
    map.Measure(size);
    map.Provider = MapProviderFactory.Create();

    var path = @"C:\Test.png";

    SaveToPng(map, path);
}

void SaveToPng(FrameworkElement visual, string fileName)
{
    var encoder = new PngBitmapEncoder();
    SaveUsingEncoder(visual, fileName, encoder);
}

void SaveUsingEncoder(FrameworkElement visual, string fileName, BitmapEncoder encoder)
{
    RenderTargetBitmap bitmap = new RenderTargetBitmap((int)visual.ActualWidth, (int)visual.ActualHeight, 96, 96, PixelFormats.Pbgra32);
    bitmap.Render(visual);
    BitmapFrame frame = BitmapFrame.Create(bitmap);
    encoder.Frames.Add(frame);

    using (var stream = File.Create(fileName))
    {
        encoder.Save(stream);
    }
}

我得到的结果是:

在这里输入图像描述

而不是普通的地图,像这样:

在这里输入图像描述

会感谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-01 14:22:53

您可能需要等待映射加载,尝试执行以下操作:

代码语言:javascript
复制
map.Provider = MapProviderFactory.Create();
await Task.Run(async () => await Task.Delay(TimeSpan.FromSeconds(1)));

然后保存到图像

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73191788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档