2013-08-05 11 views

Odpowiedz

14

Jeszcze bardziej elegancki:

UIScreen.MainScreen.Capture(); 
+0

Awesome! Nie wiedziałem tego;) – rFlex

+0

co zwraca bajt []? lub obraz? –

+0

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

3

z Craig Dunn's stronie:

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

bardziej eleganckie:

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

} 

połączeń UIViewExtensions.TakeScreenshot(), aby wykonaj zrzut ekranu całego ekranu lub możesz wywołać funkcję AsImage() w dowolnym widoku, aby uzyskać reprezentację widoku w widoku UII. Byłoby lepiej umieścić metodę TakeScreenshot() gdzie indziej, ponieważ nie jest ona rozszerzeniem klasy UIView.

Powiązane problemy