【问题标题】:Screen capture program on Mac OS X Lion, preferable portable on other OSMac OS X Lion 上的截屏程序,更适合在其他操作系统上移植
【发布时间】:2011-12-11 02:45:10
【问题描述】:

我需要开发一个在 Mac OS X Lion 上运行的屏幕捕获程序。我尝试使用monoGTK#截屏,但是截屏是黑色的

Gdk.Window window = Gdk.Global.DefaultRootWindow;
if (window!=null)
{           
    Gdk.Pixbuf pixBuf = new Gdk.Pixbuf(Gdk.Colorspace.Rgb, false, 8, 
                                       window.Screen.Width, window.Screen.Height);          
    pixBuf.GetFromDrawable(window, Gdk.Colormap.System, 0, 0, 0, 0, 
                           window.Screen.Width, window.Screen.Height);          
    pixBuf.ScaleSimple(400, 300, Gdk.InterpType.Bilinear);
    pixBuf.Save("screenshot0.jpeg", "jpeg");
}

你能指出我正确的方向吗?最好使用mono,但如果是javac++objective c 也不错。
提前致谢。

【问题讨论】:

  • 我怀疑 Gtk 的 Mac OS 端口是否可以让您对平台窗口系统进行低级访问。 GDK 文档提到 GDK_ROOT_WINDOW() 作为后端特定的函数。
  • DefaultRootWindow 的概念来自 X Windows。如果它正确地转换为 OS X,我会感到惊讶。
  • 我不知道,我尝试使用 DefaultRootWindow,看到有问题,但它会黑屏。
  • @croisharp 是的,我的意思是 DefaultRootWindow 可能只适用于 Linux。 (或者更确切地说,在 X11 下。)GDK 的 OS X 端口完全有可能为您提供一个不返回有用数据的虚拟实现。

标签: c# java .net c++ screen-capture


【解决方案1】:

对于 Java,请参阅 Robot.createScreenCapture(Rectangle)。但请注意,Robot 通常也会为应用程序生成黑屏图像。直接控制屏幕区域(例如许多游戏)。

【讨论】:

    【解决方案2】:

    您最好的选择可能是使用特定于平台的 API 来进行实际的图像捕获,而您的应用程序的其余部分仍然是可移植的。对于 OS X,Apple 实际上提供了sample code 来说明如何执行此操作,您的代码可能会在 X11 下运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 2011-10-12
      • 2012-03-22
      • 2012-04-05
      相关资源
      最近更新 更多