0

我正在尝试截取视图的屏幕截图。

我正在使用以下链接中的代码,该代码运行良好,但有一个例外:

可可:如何将视图渲染到图像?

我遇到的问题是,如果我将应用程序窗口拖到我的第二台显示器上,屏幕捕获会抓取错误的矩形。本质上,矩形已垂直移位,或者可能使用左上角而不是左下角的原点。

奇怪的是,该应用程序在启动监视器上运行良好,但是当我将它拖到第二个监视器(没有关闭并重新启动应用程序)时,矩形捕获出错了。如果我将应用程序拖回启动监视器,一切都会重新开始工作。

主显示器和辅助显示器具有不同的分辨率。

转换rect的代码如下:

NSRect originRect = [aView convertRect:[aView bounds] toView:[[aView window] contentView]];
NSRect rect = originRect;
rect.origin.y = 0;
rect.origin.x += [aView window].frame.origin.x;
rect.origin.y += [[aView window] screen].frame.size.height - [aView window].frame.origin.y - [aView window].frame.size.height;
rect.origin.y += [aView window].frame.size.height - originRect.origin.y - originRect.size.height;

有谁知道为什么这在启动监视器上计算正确,但在辅助监视器上计算错误?

问题一定与不同的分辨率有关,但我不明白为什么调用 convertRect:toView (或后续计算)不起作用。

顺便说一句,我正在 10.8.4 上开发这个并针对 10.7。

谢谢

达伦。

4

1 回答 1

0

问题是屏幕尺寸总是取自当前监视器,而应该从主监视器获取。

rect.origin.y += [[aView window] screen].frame.size.height - [aView window].frame.origin.y - [aView window].frame.size.height;
rect.origin.y += [aView window].frame.size.height - originRect.origin.y - originRect.size.height;

替换为:

NSArray *screens = [NSScreen screens];
NSScreen *primaryScreen = [screens objectAtIndex:0];

rect.origin.y = primaryScreen.frame.size.height - [aView window].frame.origin.y - originRect.origin.y - originRect.size.height;

我已经为我在这篇文章顶部引用的原始文章添加了一个完整的答案:

可可:如何将视图渲染到图像?

于 2013-07-28T11:23:48.030 回答