2013-03-05 51 views
5

ArcGIS harita nesnesinin bir görüntüsünü üzerinde grafik katmanıyla birlikte vermek istiyorum. Esri'nin kendi web hizmetlerini ihracat için denedim ancak çok etkili ve net değiller, karmaşık geometrik şekilleri desteklemiyorlar, aynı zamanda Google harita sağlayıcısı gibi yerel katmanları desteklemiyorlar. Servis sadece tüm katmanlarda istiyorum sadece ArcGISTiledLayer destekler. Bu yüzden forumlarında arama yaptım, ancak sonraki sürümlere kadar yerel katmanları desteklemeyeceklerini söylediler.Silverlight UI Element'i görüntü olarak almanın bir yolu var mı?

ImagePol kitaplıkları ve WritableBitmapEx kitaplıklarını codeplex içinde denedim. Ama bir WritableBitmap'ten byte [] almaya çalışırken, bazı güvenlik nedenleriyle Pixels özelliğine erişemiyorum. Uygulama bir SecurityException atar ve "bu piksel özelliğine erişemezsiniz" diyor.

UIElement denetiminin görüntüsünü almak ve diske kaydetmek için herhangi bir yol var mı? Yoksa bu güvenlik istisnası için bir çözüm var mı? İşte http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.rendertargetbitmap.aspx

bir tasarruf nasıl bir örneğidir -

cevap

5

Evet görüntü araçları kütüphane RenderTargetBitmap/jpg vb

http://imagetools.codeplex.com/

Ayrıca kullanabilirsiniz png içine bunu yapmanın bir yöntemi vardır diske dosya. Eğer bir iletişim

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

DÜZENLEME dan bunu sadece yapabilirsiniz -

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

var bytData = objImage.ToPng(); 

Uzatma yöntemi çağırma Örnek kod

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

ben kullanmak için bazı kod var Bir png kaydetmek için imagetools Onu bulmak için :) – Dreamwalker

+0

WriteToStream yöntemi ile görüntü araçları kitaplığı denedim, işe yaramıyor. RenderTargetBitmap sınıfını deneyeceğim. –

+0

Diske kaydetme SaveFileDialog ile yapılmalıdır, aksi takdirde aklınızda bir istisna ayı alırsınız. Hala imagetools kodu – Dreamwalker