RubyからMac OS Xのスクリーンショットを撮る
RubyからCocoaを叩いてMac OS Xのスクリーンショットを撮るサンプル。
$ sudo port install rb-cocoa
を実行すること。
なぜか「全体のスクリーンのRect」を意味するOSX::CGRectInfinite定数が見つからなかったので、 OSX::NSScreen.screensで、スクリーンリストを取得、その0番目が全体スクリーンなので、そのframeを手に入れ、 そのwidthとheightからOSX::CGRectを作成、そいつをCGWindowListCreateImageの引数に入れて呼んでいる。
require 'osx/cocoa' f = OSX::NSScreen.screens[0].frame cr = OSX::CGRectMake(0,0,f.width,f.height) screenshot = OSX::CGWindowListCreateImage(cr, OSX::KCGWindowListOptionOnScreenOnly, OSX::KCGNullWindowID, OSX::KCGWindowImageDefault) c = OSX::CIImage.imageWithCGImage(screenshot) bitmaprep = OSX::NSBitmapImageRep.alloc.initWithCIImage(c) blob = bitmaprep.representationUsingType_properties(OSX::NSJPEGFileType,nil) blob.writeToFile_atomically("test.jpg",false)
スクリーンショットはNSObject。これをCIImageを経由してNSBitmapImageRepにして、ファイルタイプにJPGを指定してからファイル名を指定して保存する。