2016-05-14 50 views
0

中的文件我不是一个有经验的开发人员,我遇到了问题。如何捕获屏幕并将其保存到Xamarin.Mac

我不明白如何制作截图并将其保存到文件中。

[DllImport("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics")] 
    private static extern IntPtr CGWindowListCreateImage(RectangleF screenBounds, CGWindowListOption windowOption, uint windowID, GWindowImageOption imageOption); 
partial void ButtonClicked (Foundation.NSObject sender) { 

      IntPtr screenShot = CGWindowListCreateImage ((RectangleF)NSScreen.MainScreen.Frame, CGWindowListOption.IncludingWindow, 
       0, CGWindowImageOption.Default); 

      CGImage img = new CGImage(screenShot); 
      NSBitmapImageRep imgRep = new NSBitmapImageRep(img); 

      NSImage imgf = new NSImage(img, NSScreen.MainScreen.Frame.Size); 
     } 

不确定它是否正常工作。谁能帮忙?

回答

1

这个片段将捕捉当前画面,并将结果保存为PNG到桌面:


[DllImport("/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/CoreGraphics")] 
static extern IntPtr CGWindowListCreateImage(CGRect screenBounds, CGWindowListOption windowOption, uint windowID, CGWindowImageOption imageOption); 

public override void ViewDidLoad() 
{ 
    base.ViewDidLoad(); 

    using (var pool = new NSAutoreleasePool()) 
    { 
     CGRect fullScreenBounds = NSScreen.MainScreen.Frame; 
     IntPtr imageRef = CGWindowListCreateImage(fullScreenBounds, CGWindowListOption.All, 0, CGWindowImageOption.Default); 
     var cgImage = new CGImage(imageRef); 
     var filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "StackOverflow.png"); 
     var fileURL = new NSUrl(filePath, false); 
     var imageDestination = CGImageDestination.Create(fileURL, UTType.PNG, 1); 
     imageDestination.AddImage(cgImage); 
     imageDestination.Close(); 
    } 
}