有没有办法让Silverlight UI Element成为图像?

Cem*_*mez 5 c# silverlight maps arcgis

我想导出我的ArcGIS地图对象的图像,上面有图形图层.我已经尝试过esri自己的Web服务用于导出,但它们不是那么高效和清晰,不支持复杂的几何形状,也不支持Google地图提供商等本地层.服务仅支持ArcGISTiledLayer,我想在所有层中使用它.所以,我在他们的论坛中搜索,但他们说他们不会支持本地层,直到下一个版本.

我在codeplex中尝试过ImageTool库和WritableBitmapEx库.但是当我尝试从WritableBitmap获取byte []时,由于某些安全原因,我无法访问其Pixels属性.应用程序抛出SecurityException并说"你无法访问这个像素属性".

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

Dre*_*ker 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();
Run Code Online (Sandbox Code Playgroud)

扩展方法

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;
}
Run Code Online (Sandbox Code Playgroud)