6

CALayer でサポートされた NSView を含む NSScrollView を含む NSView があります。-dataWithPDFInsideRectNSViewを NSImage にキャプチャする通常の方法をすべて試しました ( -initWithFocusedViewRect. このStackOverflow の投稿は既に見ましたが、通常の NSView とレイヤーに基づくビューの両方を含む NSView ではなく、CALayer ツリーのみを画像にレンダリングすることに関する質問でした。

どんな助けでも大歓迎です、ありがとう:)

4

4 に答える 4

6

これを行う唯一の方法は、次のような CGWindow API を使用することです。

CGImageRef cgimg = CGWindowListCreateImage(CGRectZero, kCGWindowListOptionIncludingWindow, [theWindow windowNumber], kCGWindowImageDefault);

次に、ビューに対応するCGImageの部分を切り取ります

-imageByCroppingToRect.

次に、切り取った CGImage から NSImage を作成します。そのウィンドウの一部が画面外にある場合、これはうまく機能しないことに注意してください。

于 2010-12-30T19:27:32.160 に答える
2

これは、ビューを に直接描画するために機能しますNSImageが、レイヤーに基づくビューで試したことはありません。

NSImage * i = [[NSImage alloc] initWithSize:[view frame].size];
[i lockFocus];
if ([view lockFocusIfCanDrawInContext:[NSGraphicsContext currentContext]]) {
  [view displayRectIgnoringOpacity:[view frame] inContext:[NSGraphicsContext currentContext]];
  [view unlockFocus];
}
[i unlockFocus];

NSData * d = [i TIFFRepresentation];
[d writeToFile:@"/path/to/my/test.tiff" atomically:YES];
[i release];
于 2011-01-03T20:36:40.170 に答える
0

Cocoa Drawing Guide の提案をご覧になりましたか? ( 「ビットマップの作成」 )

ビットマップに直接描画するには、必要なパラメーターを使用して新しい NSBitmapImageRep オブジェクトを作成し、NSGraphicsContext の graphicsContextWithBitmapImageRep: メソッドを使用して描画コンテキストを作成します。新しいコンテキストを現在のコンテキストにして描画します。この手法は、Mac OS X v10.4 以降でのみ使用できます。または、NSImage オブジェクト (またはオフスクリーン ウィンドウ) を作成し、そこに描画してから、画像の内容をキャプチャすることもできます。この手法は、Mac OS X のすべてのバージョンでサポートされています。

これは、私がよく知っている iOS ソリューション (UIGraphicsBeginImageContext と UIGraphicsGetImageFromCurrentImageContext を使用) に似ているように聞こえるので、あなたのビューで機能することを期待しています。

于 2011-01-03T18:48:30.073 に答える
0

この投稿の回答をご覧ください:コア アニメーション レイヤーを含むビューをビットマップにレンダリングするにはどうすればよいですか?

そのアプローチは、あなたと同様の状況下で私にとってはうまくいきました。

于 2011-02-01T11:55:39.327 に答える