mac _ Screenshots and screenshots

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

// 截屏(全屏幕)

- (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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值