ページ

2008年9月26日金曜日

環境設定(16)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

角丸+影+白枠のケースを例にして処理を追ってみる。

まずCGWindowListCreateImage( ) でキャプチャ画像を用意し、NSImageに変換しておく。


次に最終画像を書き込む NSImage *output_imageを用意する。大きさは、影と白枠が付くので元画像よりも大きくなる。※説明しやすいように黄色で表現してある。


白枠用のパス NSBezierPath* frame_path を用意する。白枠が付かない場合も画像と同じ大きさで作っておく。影を描く時にこれを使う。なお今回は角が丸いので #bezierPathWithRoundedRect:xRadius:yRadius: を使う(角が丸くない場合は #bezierPathWithRect: を使う)。


output_imageのフォーカスをロックした上で、frame_pathを使って白く塗りつぶす。

 [output_image lockFocus];
[[NSColor whiteColor] set];
[frame_path fill];



塗りつぶす前に NSShadow*shadow を作り #set しておく。そうすると上記の様に塗りつぶした領域の下に影が付く。

最後に src_image を上に描く。


画像の角を丸く切り抜くには、角丸のパスを作り、これを使って描画時にクリッピングする。こんな感じ。



できあがり。



角丸、影、白枠の有無によって上記の大きさや、処理の有無を調整すればいろいろな組み合わせで加工できる。

ソースコードは SimpleCap の一部として後日公開予定。