让我们来写一个抓屏程序吧。当然,你知道只要按command+shift+3就可以抓取当前屏幕对吧?本文介绍如何用cocoa程序来实现这一功能。

- (NSImage *) captureScreenImageWithFrame: (NSRect) frame
{
    // 获取屏幕的图形端口
        
    CGrafPtr screenPort = CreateNewPort ();
    Rect screenRect;
    GetPortBounds (screenPort, &screenRect);
        
    // 创建一个临时窗口做为容器
        
    NSWindow *grabWindow = [[NSWindow allocinitWithContentRect: frame
 

                                                                                              styleMask:NSBorderlessWindowMask

 

                                                                                                   backing:NSBackingStoreRetained

 

                                                                                                     deferNO

                                                                                                   screennil];
    CGrafPtr windowPort = GetWindowPort ([grabWindow windowRef]);
    Rect windowRect;
    GetPortBounds (windowPort, &windowRect);
    SetPort (windowPort);
        
    // 将屏幕内容复制到临时窗口
        
    CopyBits (GetPortBitMapForCopyBits(screenPort),
              GetPortBitMapForCopyBits(windowPort),
              &screenRect,
              &windowRect,
              srcCopy,
              NULL);
        
    // 将窗口内容复制到NSImage
        
    NSView *grabContentView = [grabWindow contentView];
        
    [grabContentView lockFocus];
    NSBitmapImageRep *screenRep;
    screenRep = [[NSBitmapImageRep allocinitWithFocusedViewRect: frame];
    [grabContentView unlockFocus];
        
    NSImage *screenImage = [[NSImage allocinitWithSize: frame.size];
    [screenImage addRepresentation: screenRep];
        
 

    // Clean up

    [grabWindow close];
    DisposePort(screenPort);
        
    return (screenImage);
        
// captureScreenImageWithFrame