ページ

2009年5月5日火曜日

Paparazzi! を試す(2)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Paparazzi! は古いバージョンだがソースコードが用意されている。ポイントだけ引用してみる。

PaparazziController.m

- (id)initWithWindow:(NSWindow *)window {
if (self = [super initWithWindow:window]) {
webWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect(-16000.0, -16000.0, 100.0, 100.0) styleMask:NSBorderlessWindowMask backing:NSBackingStoreRetained defer:NO];
webView = [[WebView alloc] initWithFrame:NSMakeRect(-16000.0, -16000.0, 100.0, 100.0)];
   :


なるほど。表示領域外にウィンドウと WebViewを作っている。

- (IBAction)fetch:(id)sender {
   :
[webWindow setContentSize:newSize];

[webView setFrameSize:newSize];

[self validateInputSchemeForControl:urlField];

[[webView mainFrame] loadRequest:[NSURLRequest requestWithURL:url]];
}


サイズを調整し URLを表示する。

- (void)takeScreenshot {
   :
[webView lockFocus];
bitmap = [[NSBitmapImageRep alloc] initWithFocusedViewRect:cropBounds];
[webView unlockFocus];
   :


NSBitmapImageRep#initWithFocusedViewRect: を使いキャプチャしている。このメソッドは #lockFocus 対象のビューが表示している内容をビットマップイメージに落とす。隠れている部分はイメージに落ちないので、Webページ全体をキャプチャする場合、あらかじめビューのサイズを大きくとっておく必要がある。んん。これはこれまで試していた方法に近い。

表示領域ではウィンドウのサイズに制約がかかっていたが、表示領域外であれば制約がかからないということだろうか。