让我们来写一个抓屏程序吧。当然,你知道只要按command+shift+3就可以抓取当前屏幕对吧?本文介绍如何用cocoa程序来实现这一功能。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
- (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
|
本文介绍如何利用Cocoa框架编写一个屏幕截图程序,实现类似Command+Shift+3的功能,通过创建临时窗口并复制屏幕内容到NSImage中来保存截图。

被折叠的 条评论
为什么被折叠?



