Cocoa学习

我的Cocoa/Cocoa Touch学习笔记

在Cocoa程序中进行屏幕截图

用过QQ for Mac的都知道QQ能够直接截图发送。那么,我们如何在Cocoa程序中嵌入截图支持呢?有一个最简单的方法是使用OSX自带的screencapture命令行工具来进行截图。

下面用代码来进行说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- (IBAction)grabScreen:(id)sender {
    NSTask *capture = [[[NSTask alloc] init] autorelease];
    capture.launchPath = @"/usr/sbin/screencapture";
    // -i参数表示交互模式,-c参数表示把截图保存到剪贴板
    capture.arguments = [NSArray arrayWithObjects:@"-i", @"-c", nil];

    [capture setTerminationHandler: ^(NSTask *t) {
        NSPasteboard *pboard = [NSPasteboard generalPasteboard];
        NSPasteboardItem *pboardItem = [[pboard pasteboardItems] objectAtIndex:0];
        NSString *pboardItemType = [[pboard types] objectAtIndex:0];
        NSData *imageData = [pboardItem dataForType:pboardItemType];
        NSImage *image = [[NSImage alloc] initWithData:imageData];
        [self.imageView setImage:image];
        [image release];
    }];

    [capture launch];
}

原理很简单,就是通过NSTask运行screencapture截图,并把截到的图保存在系统剪贴板。然后用NSTaskterminationHandler:来处理图片,这个例子中是显示到一个imageView中。

你可以创建一个实验项目测试一下上面的代码,示例代码已经推送到Github上了。下面是运行效果:

在Cocoa中屏幕截图还有很多方法,比如,苹果的开发者文档里就提供了一种用CGWindow截图的示例代码。这种方法无需调用外部程序,如果有需要,你可以参考一下。

(全文完)

Comments