mac _ Screenshots and screenshots

来源:互联网 发布:linux挂载光盘 编辑:程序博客网 时间:2024/05/29 13:25

由于项目需要,需要一个截图功能。

// 截屏(全屏幕)

- (IBAction)button1:(id)sender {    NSMutableArray *datas = [NSMutableArray array];    //存储所有显示器显示id    CGDirectDisplayID dspyIDArray[10];    uint32_t dspyIDCount = 0;    //获取当前活跃的所有显示器id及其个数    if (CGGetActiveDisplayList(10, dspyIDArray, &dspyIDCount) != kCGErrorSuccess)        return;    CFStringRef dspyDestType = CFSTR("public.png");    for(uint32_t i = 0; i < dspyIDCount; i++) {        CGDirectDisplayID mainID = dspyIDArray[i];        // 根据Quartz分配给显示器的id,生成显示器mainID的截图        CGImageRef mainCGImage = CGDisplayCreateImage(mainID);        CFMutableDataRef mainMutData = CFDataCreateMutable(NULL, 0);        CGImageDestinationRef mainDest = CGImageDestinationCreateWithData(mainMutData, dspyDestType, 1, NULL);        CGImageDestinationAddImage(mainDest, mainCGImage, NULL);        CGImageRelease(mainCGImage);        CGImageDestinationFinalize(mainDest);        CFRelease(mainDest);        [datas addObject:(__bridge NSData *)mainMutData];        CFRelease(mainMutData);    }    CFRelease(dspyDestType);    NSInteger imageCount = [datas count];    if (imageCount <= 0) {        return;    }    NSImage *tmpImage = [[NSImage alloc] initWithData:[datas objectAtIndex:imageCount-1]];    [self.imageviews setImage:tmpImage];}

// 选取截图

- (IBAction)button2:(id)sender {    NSTask *capture = [[NSTask alloc] init];    capture.launchPath = @"/usr/sbin/screencapture";    capture.arguments = [NSArray arrayWithObjects:@"-i", @"-c", nil];    [capture setTerminationHandler: ^(NSTask *t) {        NSPasteboard *pboard = [NSPasteboard generalPasteboard];        if ([pboard pasteboardItems].count <= 0) return ;        NSPasteboardItem *pboardItem = [[pboard pasteboardItems] objectAtIndex:0];        NSString *pboardItemType = [[pboard types] objectAtIndex:0];        NSData *imageData = [pboardItem dataForType:pboardItemType];        NSImage *image = [[NSImage alloc] initWithData:imageData];        [self.imageviews setImage:image];    }];    [capture launch];}

// 3

// 命令行选择性截屏- (IBAction)button3:(id)sender {    NSTask *capture = [[NSTask alloc] init];    capture.launchPath = @"/usr/sbin/screencapture";    capture.arguments = [NSArray arrayWithObjects:@"-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.imageviews setImage:image];        image = nil;    }];    [capture launch];}

参考资料:http://blog.sina.com.cn/s/blog_8343bc050102vaud.html

原创粉丝点击