5

我想导出带有图形图层的 ArcGIS 地图对象的图像。我已经尝试过 esri 自己的网络服务进行导出,但它们不是那么高效和清晰,不支持复杂的几何形状,也不支持本地图层,例如谷歌地图提供商。服务仅支持 ArcGISTiledLayer 我希望它在所有图层中。因此,我在他们的论坛中进行了搜索,但他们说在下一个版本之前他们不会支持本地图层。

我在 codeplex 中尝试过 ImageTool 库和 WritableBitmapEx 库。但是,当我尝试从 WritableBitmap 获取 byte[] 时,出于某些安全原因,我始终无法访问其 Pixels 属性。应用程序抛出 SecurityException 并说“您无法访问此像素属性”。

那么,有没有办法获取 UIElement 控件的图像并将其保存到磁盘?或者是否有解决此安全异常的方法?

4

1 回答 1

5

是的,图像工具库有一种方法可以在 png/jpg 等中执行此操作。

http://imagetools.codeplex.com/

您也可以使用 RenderTargetBitmap - http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.rendertargetbitmap.aspx

这是一个如何将文件保存到磁盘的示例。你只能从对话框中做到这一点

http://www.silverlightshow.net/items/Using-the-SaveFileDialog-in-Silverlight-3.aspx

编辑 - 示例代码

打电话

var objImage = new WritableBitmap(MyElement, MyElement.RenderTransform);

var bytData = objImage.ToPng();

扩展方法

using ImageTools.IO.Png;
using ImageTools;

public static byte[] ToPng(this WriteableBitmap Image)
{
    byte[] bytResult;

    using (MemoryStream objPngStream = new MemoryStream())
    {
        PngEncoder objPngEncoder = new PngEncoder();
        objPngEncoder.Encode(Image.ToImage(), objPngStream);
        objPngStream.Seek(0, SeekOrigin.Begin);
        bytResult = objPngStream.ToArray();
        objPngStream.Close();
    }
    return bytResult;
}
于 2013-03-05T13:24:16.900 回答