2011-07-25 7 views
0

私はMac OS用の小さなCocoaアプリケーションを作成しています。目標はウィンドウを表示し、画面上のピクセルを読み取ることです。私はすでに後者の方法を知っていますが、進行する前にウィンドウを表示することに問題があります。私が見たことから、NSWindowのmakeKeyAndOrderFrontによって引き起こされるようなウィンドウの更新は延期されます。NSWindowへの同期コールmakeKeyAndOrderFront

私はまだココアの比較的新しいんだけど、私は基本的にこのような何かをしたい:

[myWindow makeKeyAndOrderFront:self]; 
// application blocks right here until the window is actually shown 
... 

それでは、どのように私はブロック操作が起こることをするのですか?

+0

ピクセルを読み取った後にウィンドウを表示するだけではどうですか?どちらも長い時間がかかりません。 – spudwaffle

+0

ウィンドウで描画されたピクセルを読み込みたい。 –

+0

あなたのアプリのウィンドウのスクリーンショットを撮りたいですか? – spudwaffle

答えて

0

ウィンドウで[NSWindow display]を呼び出すと、強制的に表示されます。

+0

Kevinには、ウィンドウのピクセルを直接読み取るという素晴らしい提案もありました。特定のウィンドウのバッキングストアから直接読み取るには、 - [NSView lockFocus]メソッドと - [NSBitmapImageRep initWithFocusedViewRect:]を使用することを検討してください。 –

0

オブジェクトをウィンドウのNSWindowDelegateとして委任し、windowDidBecomeKey:がデリゲートで呼び出されるとスクリーンショットを撮るだけです。

+0

私はこれを試しましたが、正しい結果が得られませんでした。このコールバックはあまりにも早く呼び出されたようです。参考までに、私は画面全体をカバーする長方形を描画しています。 –

+0

正確に何を試そうとしていますか? – spudwaffle

1

おそらく、画面ではなくウィンドウからピクセルを取得できますか? Mac OS Xでは、(ほとんど)すべてのウィンドウには、表示されているかどうかにかかわらず、独自のバッファ(バッキングストア)があります。これにより、ウィンドウが配置されている画面の領域を不明瞭にするシステムダイアログがあっても、テストが確実に行われます。