25MAR
让我们来写一个抓屏程序吧。当然,你知道只要按command+shift+3就可以抓取当前屏幕对吧?本文介绍如何用cocoa程序来实现这一功能。
- (NSImage *) captureScreenImageWithFrame: (NSRect) frame
{
// 获取屏幕的图形端口
CGrafPtr screenPort = CreateNewPort ();
Rect screenRect;
GetPortBounds (screenPort, &screenRect);
// 创建一个临时窗口做为容器
NSWindow *grabWindow = [[NSWindow alloc] initWithContentRect: frame
styleMask:
NSBorderlessWindowMask
backing:
NSBackingStoreRetained
defer:
NO
screen: nil];
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 alloc] initWithFocusedViewRect: frame];
[grabContentView unlockFocus];
NSImage *screenImage = [[NSImage alloc] initWithSize: frame.size];
[screenImage addRepresentation: screenRep];
// Clean up
[grabWindow close];
DisposePort(screenPort);
return (screenImage);
} // captureScreenImageWithFrame