使用MonoMac在OSX上进行屏幕捕获?

时间:2013-09-17 13:29:57

标签: macos bitmap mono monodevelop monomac

有人可以帮助我使用以下代码片段来捕获OSX上的部分或整个桌面吗?我想指定定义捕获的矩形的左上角坐标(x,y)和宽度(w)以及高度(h)。

适用于OSX上的C#MonoMac应用程序。

这就是我所做的:

int windowNumber = 2;
System.Drawing.RectangleF bounds = new RectangleF(0,146,320,157);

CGImage screenImage = MonoMac.CoreGraphics.CGImage.ScreenImage(windowNumber,bounds);

MonoMac.Foundation.NSData bitmapData = screenImage.DataProvider.CopyData();

看起来我在'bitmapData'中有位图数据,但我不确定如何将NSData实例'bitmapData'转换为实际的Bitmap;即:

位图screenCapture = ????

文档非常稀疏,我用Google搜索了没有运气的例子。所以我希望那里有一位MonoMac专家可以指出我正确的方向? - 一个例子很好:o)

提前谢谢!

1 个答案:

答案 0 :(得分:2)

这将为您提供.NET字节[]中捕获的字节,您可以从中创建位图或图像或任何您想要的内容。可能不是你想要的,但应该把你放在正确的方向。

        int windowNumber = 2; System.Drawing.RectangleF bounds = new RectangleF(0,146,320,157);

        CGImage screenImage = MonoMac.CoreGraphics.CGImage.ScreenImage(windowNumber,bounds);

        using(NSBitmapImageRep imageRep = new NSBitmapImageRep(screenImage))
        {
            NSDictionary properties = NSDictionary.FromObjectAndKey(new NSNumber(1.0), new NSString("NSImageCompressionFactor"));
            using(NSData tiffData = imageRep.RepresentationUsingTypeProperties(NSBitmapImageFileType.Png, properties))
            {
                byte[] imageBytes;

                using(var ms = new MemoryStream())
                {
                    tiffData.AsStream().CopyTo(ms);
                    imageBytes = ms.ToArray();
                }
            }
        }