2013-08-05 25 views

cevap

14

Daha zarif:

UIScreen.MainScreen.Capture(); 
+0

Müthiş! Bunu bilmiyordum;) – rFlex

+0

byte []? veya görüntü mü? –

+0

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

3

Craig Dunn's sitesinden adres:

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

Daha zarif:

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

} 

Çağrı UIViewExtensions.TakeScreenshot() için tüm ekranın bir ekran görüntüsünü alın veya görünümün bir UIImage temsilini almak için herhangi bir görünüme AsImage() diyebilirsiniz. UIView sınıfının bir uzantısı olmadığı için TakeScreenshot() yöntemini başka bir yere koymak daha iyi olacaktır.

İlgili konular