ページ

2008年3月6日木曜日

画面キャプチャその6 - 選択範囲をキャプチャ(完成)

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



前回の続き。NSBitmapImageRep#initWithFocusedViewRect ではうまく行かなかったので今回は CGWindowListCreateImage( )を使ってみる。

MyView.h

 NSString* path = [NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString* filename = [path stringByAppendingPathComponent:@"sample_shot.png"];

CGRect rect = CGRectMake(_spot_rect.origin.x, _spot_rect.origin.y, _spot_rect.size.width, _spot_rect.size.height);
CGWindowID window_id = (CGWindowID)[[self window] windowNumber];
CGImageRef cgimage = CGWindowListCreateImage(rect, kCGWindowListOptionOnScreenBelowWindow, window_id, kCGWindowImageDefault);
NSBitmapImageRep *bitmap_rep = [[NSBitmapImageRep alloc] initWithCGImage:cgimage];
NSData* data = [bitmap_rep representationUsingType:NSPNGFileType
properties:[NSDictionary dictionary]];

[data writeToFile:filename atomically:YES];
[bitmap_rep release];


CGWindowListCreateImage には選択範囲 rect、CGWindowIDにはアプリのウィンドウ(透明)を指定する。その上で kCGWindowListOptionOnScreenBelowWindow オプションを指定するとアプリウィンドウより下のウィンドウ群が対象になる。

さて、結果は?



うまくできた。

ソース:FullScreenSample-6.zip