2013-03-05 21 views
5

Voglio esportare un'immagine del mio oggetto mappa ArcGIS con il livello grafico su di esso. Ho provato i servizi Web di esri per l'esportazione, ma non sono così efficienti e chiari, non supportano forme geometriche complesse e non supportano livelli locali come il fornitore di mappe di Google. Il servizio supporta solo ArcGISTiledLayer lo voglio in tutti i livelli. Così, ho cercato nei loro forum ma dicono che non supporteranno i livelli locali fino alle prossime versioni.C'è un modo per ottenere Silverlight UI Element come immagine?

Ho provato librerie ImageTool e librerie WritableBitmapEx in codeplex. Ma quando cerco di ottenere byte [] da un WritableBitmap non riesco ad accedere alla sua proprietà Pixels per alcuni motivi di sicurezza tutto il tempo. L'applicazione lancia SecurityException e dice che "non puoi accedere a questa proprietà pixel".

Quindi, esiste un modo per ottenere un'immagine di controllo UIElement e salvarla sul disco? O c'è una soluzione alternativa per questa eccezione di sicurezza?

risposta

5

Sì biblioteca strumenti immagine ha un metodo per fare questo in png/jpg, ecc

http://imagetools.codeplex.com/

Inoltre è possibile utilizzare RenderTargetBitmap - http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.rendertargetbitmap.aspx

Ecco un esempio di come salvare un file su disco. solo tu puoi farlo da una finestra

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

EDIT - codice di esempio

Calling

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

var bytData = objImage.ToPng(); 

Metodo di estensione

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

io ho qualche codice da usare imagetools per salvare un tentativo png per trovarlo :) – Dreamwalker

+0

ho provato la libreria di strumenti di immagini con il metodo WriteToStream, non funziona. Proverò la classe RenderTargetBitmap. –

+0

Il salvataggio su disco deve essere eseguito con il parametro SaveFileDialog, in caso contrario si terrà presente un'eccezione. Sto ancora cercando il codice imagetools – Dreamwalker