2

有人可以帮助我使用以下代码片段来捕获 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”转换为实际的位图;IE :

位图屏幕捕捉 = ????

文档真的很稀少,我用谷歌搜索了一些没有运气的例子。所以我希望那里有一位善良的 MonoMac 专家可以为我指明正确的方向吗?- 一个例子会很好:o)

先感谢您!

4

1 回答 1

2

这将在 .NET byte[] 中为您提供捕获的字节,您可以从中创建位图或图像或任何您想要的。可能不是您正在寻找的东西,但应该让您朝着正确的方向前进。

        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();
                }
            }
        }
于 2013-09-17T15:45:27.057 回答