ページ

2008年9月24日水曜日

環境設定(14)

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

プレビューができたので、実際の実装に入る。手を入れるのは範囲選択処理を司る SelectionHandler。キャプチャ画像を作成するメソッドが1つにまとめられているので、ここに手を入れれば良い。

SelectionHandler.m

- (CGImageRef)capture
{
CGImageRef cgimage = CGWindowListCreateImage(NSRectToCGRect(_rect),
kCGWindowListOptionOnScreenBelowWindow,
[_capture_controller windowID],
kCGWindowImageDefault);}
return cgimage;


他のHandlerと同様、最後のファイル出力メソッドへは CGImage で渡している。一方、画像を加工するには NSImageの方が少なくとも自分にとっては都合が良い。そこで一旦、NSImageへ変換してそれを加工した後、最後にまた CGImageへ変換して返す事にする。そうすればこのメソッド以外に書き直す必要は無い。

こんな感じ。
- (CGImageRef)capture
{
// (1) キャプチャ
CGImageRef cgimage = CGWindowListCreateImage(NSRectToCGRect(_rect),
kCGWindowListOptionOnScreenBelowWindow,
[_capture_controller windowID],
kCGWindowImageDefault);}

// (2) NSImage へ変換
NSBitmapImageRep *bitmap = [[[NSBitmapImageRep alloc] initWithCGImage:cgimage] autorelease];
NSImage* src_image = [[[NSImage alloc] init] autorelease];
[src_image addRepresentation:bitmap];

// (3) 加工
    :
    :
NSImage* output_iamge = 加工 ( src_image );

// (4) CGImageへ戻す
NSBitmapImageRep *out_bitmap = [NSBitmapImageRep imageRepWithData:[output_image TIFFRepresentation]];
CGImageRef out_image = [out_bitmap CGImage];


// (5) 結果を返す
return cgimage;
}


変換のオーバーヘッドはあるが、これで扱いやすくなった。実際の加工処理を入れていこう。