Come posso fare uno screenshot con Xamarin.iOS e archiviare questa immagine in UIImage.Come prendere uno screenshot dell'iPhone/iPad a livello di programmazione con Xamarin.iOS (C#)?
ho visto diversi esempi di Obj-C, ma non C#
Come posso fare uno screenshot con Xamarin.iOS e archiviare questa immagine in UIImage.Come prendere uno screenshot dell'iPhone/iPad a livello di programmazione con Xamarin.iOS (C#)?
ho visto diversi esempi di Obj-C, ma non C#
ancora più elegante:
UIScreen.MainScreen.Capture();
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");
}
}
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.
Impressionante! Non lo sapevo;) – rFlex
cosa restituisce byte []? o immagine? –
UIImmagine: https://developer.xamarin.com/api/member/UIKit.UIScreen.Capture()/ –