0

ビューのスクリーンショットを撮ろうとしています。

次のリンクのコードを使用していますが、1 つの例外を除いて正常に動作しています。

ココア:ビューを画像にレンダリングする方法は?

私が抱えている問題は、アプリケーション ウィンドウを 2 番目のモニターにドラッグすると、スクリーン キャプチャが間違った四角形を取得することです。基本的に、四角形は垂直方向に移動しているか、左下ではなく左上の原点を使用している可能性があります。

奇妙なことに、アプリは起動モニターで正常に動作しますが、(アプリを閉じて再起動せずに) 2 番目のモニターにドラッグすると、rect キャプチャがうまくいきません。アプリを起動モニターにドラッグすると、すべてが再び機能し始めます。

プライマリ モニターとセカンダリ モニターの解像度は異なります。

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 に答える