Jak mogę zrobić zrzut ekranu z Xamarin.iOS i zapisać ten obraz w UIImage.Jak programowo zrobić zrzut ekranu iPhone/iPad z Xamarin.iOS (C#)?
Widziałem kilka przykładów Obj-C, ale nie C#
Jak mogę zrobić zrzut ekranu z Xamarin.iOS i zapisać ten obraz w UIImage.Jak programowo zrobić zrzut ekranu iPhone/iPad z Xamarin.iOS (C#)?
Widziałem kilka przykładów Obj-C, ale nie C#
Jeszcze bardziej elegancki:
UIScreen.MainScreen.Capture();
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");
}
}
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.
Awesome! Nie wiedziałem tego;) – rFlex
co zwraca bajt []? lub obraz? –
UIImage: https://developer.xamarin.com/api/member/UIKit.UIScreen.Capture()/ –