プレビューができたので、実際の実装に入る。手を入れるのは範囲選択処理を司る 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;
}
変換のオーバーヘッドはあるが、これで扱いやすくなった。実際の加工処理を入れていこう。