老谭笔记

用代码实现截屏并保存为图片

如果需要写一个抓屏软件,我们知道截屏是可以按command+shift+3就可以实现的,对应到程序中就是可以通过NSTask调用screencapture命令来完成,但有没有更好的方法呢,比如通过原生的接口来实现?

其实在Carbon中就有很方便的接口可以实现这样的功能:

1
2
3
4
5
6
7
8
9
10
- (NSImage *)screenShot
{
CFArrayRef windowsRef = CGWindowListCreate(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
NSRect rect = [[NSScreen mainScreen] frame];
CGImageRef imgRef = CGWindowListCreateImageFromArray(rect, windowsRef, kCGWindowImageDefault);
CFRelease(windowsRef);
NSImage *img = [[NSImage alloc] initWithCGImage:imgRef size:NSZeroSize];
CGImageRelease(imgRef);
return img;
}

以上这个方法就可以截取屏幕内容并保存成图片,非常方便吧!