有没有办法让Silverlight UI Element作为一个图像

本文关键字:图像 一个 Silverlight Element UI 有没有 | 更新日期: 2023-09-27 18:02:13

我想导出我的ArcGIS地图对象上的图形层的图像。我尝试过esri自己的web服务来导出,但它们不是那么高效和清晰,不支持复杂的几何形状,也不支持像Google地图提供商这样的本地层。服务只支持ArcGISTiledLayer,我希望它在所有层。所以,我搜索了他们的论坛,但他们说他们不会支持本地图层,直到下一个版本。

我在codeplex中尝试过ImageTool库和WritableBitmapEx库。但是当我试图从WritableBitmap中获取byte[]时,由于一些安全原因,我一直无法访问其Pixels属性。应用程序抛出一个SecurityException并说'你不能访问这个pixels属性'。

那么,是否有任何方法可以获得一个UIElement控件的图像并将其保存到磁盘?或者是否有解决此安全异常的方法?

有没有办法让Silverlight UI Element作为一个图像

是的,图像工具库有一个方法可以将其转换为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 -的- savefiledialog silverlight 3. - aspx

EDIT -样例代码

调用

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;
}