2012-01-04 10 views
1

私は画面の小さな領域をキャプチャし、ディスクに保存された画像のライブラリと比較するアプリケーションを作成しています。私は数年前に同様のアプリケーションを.netで書き、bitbltとWINAPIを使用しました。パフォーマンスは本当に重要であり、パフォーマンスとの違いを生み出すためにOpenGLを掘り下げても構いません。画面の領域を選択してCGimageまたはCIImageとして保存するにはどうすればよいですか?

+0

を使用すると、「画面の領域を選択」とはどういう意味ですか?プログラムで四角形を指定するだけで、またはユーザーが指定することを意図していますか?その場合、どのユーザーインターフェイスを想像していますか? –

+0

はい、プログラムで矩形を指定するだけです。ユーザーインターフェイスはありません。ありがとう。 – Monty

答えて

3

あなたはこのようにいくつかのコードを使用することができます。

-(NSImage*)captureImageFromRect:(NSRect)captureRect 
{ 
    NSImage *resultingImage = nil; 
    CGImageRef image; 
    CGWindowID windowID = (CGWindowID)[[self window] windowNum]; 
    image = CGWindowListCreateImage(NSRectToCGRect(captureRect), kCGWindowListOptionIncludingWindow|kCGWindowListOptionOnScreenBelowWindow, windowID, kCGWindowImageDefault); 
    resultingImage = [[NSImage alloc] initWithCGImage:image size:NSZeroSize]; 
    CGImageRelease(image); 
    return [resultingImage autorelease]; 
} 
+0

ありがとうTim! CGImageやCIImageではなくNSImageを返すように設計した理由はありますか? – Monty

+0

ようこそ。通常は、NSImageが好きです。なぜなら、他の多くのCocoaクラスは、NSImageがいくつかの非常に便利なメソッドを持っているためです。しかし、結局のところ、答えはあなたが画像で何をしたいのか、そしてどのクラスを使うのかによって決まります。 – Tim

+0

ありがとうTim、時間をいただきありがとうございます。 – Monty