2013-08-05 10 views

risposta

14

ancora più elegante:

UIScreen.MainScreen.Capture(); 
+0

Impressionante! Non lo sapevo;) – rFlex

+0

cosa restituisce byte []? o immagine? –

+0

UIImmagine: https://developer.xamarin.com/api/member/UIKit.UIScreen.Capture()/ –

3

da Craig Dunn's sito:

public void ScreenCapture() 
{ 
    var documentsDirectory = Environment.GetFolderPath 
            (Environment.SpecialFolder.Personal); 

    Console.WriteLine("start capture of frame: " + this.View.Frame.Size); 
    UIGraphics.BeginImageContext(View.Frame.Size); 
    var ctx = UIGraphics.GetCurrentContext(); 
    if (ctx != null) 
    { 
     View.Layer.RenderInContext(ctx); 
     UIImage img = UIGraphics.GetImageFromCurrentImageContext(); 
     UIGraphics.EndImageContext(); 

     // Set to display in a UIImage control _on_ the view 
     imageLogo.Image = img; 

     // Save to Photos 
     img.SaveToPhotosAlbum(
     (sender, args)=>{Console.WriteLine("image saved to Photos");} 
    ); 

     // Save to application's Documents folder 
     string png = Path.Combine (documentsDirectory, "Screenshot.png"); 
     // HACK: overwrite the splash screen. iSOFlair is the application name 
     //string png = Path.Combine (documentsDirectory, "../iSOFlair.app/Default.png"); 
     NSData imgData = img.AsPNG(); 
     NSError err = null; 
     if (imgData.Save(png, false, out err)) 
     { 
     Console.WriteLine("saved as " + png); 
     } else { 
     Console.WriteLine("NOT saved as" + png + 
          " because" + err.LocalizedDescription); 
     } 
    } 
    else 
    { 
     Console.WriteLine("ctx null - doesn't seem to happen"); 
    } 
} 
2

più elegante:

public static class UIViewExtensions { 

    public static UIImage AsImage(this UIView view) { 
     UIGraphics.BeginImageContextWithOptions(view.Bounds.Size, view.Opaque, 0); 
     view.Layer.RenderInContext(UIGraphics.GetCurrentContext()); 
     UIImage img = UIGraphics.GetImageFromCurrentImageContext(); 
     UIGraphics.EndImageContext(); 

     return img; 
    } 

    public static UIImage TakeScreenshot() { 
     return UIApplication.SharedApplication.KeyWindow.AsImage(); 
    } 

} 

chiamata UIViewExtensions.TakeScreenshot() per fai uno screenshot di tutto lo schermo o puoi chiamare AsImage() a qualsiasi vista per ottenere una rappresentazione UII della vista. Sarebbe meglio mettere il metodo TakeScreenshot() da qualche altra parte in quanto non è un'estensione della classe UIView.

Problemi correlati