頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


macOSでSCNViewのスクショをコードで得る

macOSでSceneKitで描いた画面(SCNView)のスクリーンショットが欲しい。
機械学習(CNN)で使うので一定時間ごとに白黒画像をコードで得たい。

まずはカラーでもいいからスクショを得るところから。
- (UIView *)resizableSnapshotViewFromRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdates withCapInsets:(UIEdgeInsets)capInsets;
↑iOSだとこんなメソッドを使っていた。そうそう、snapshotってのがいつからかできたんだ。

macOSではどうやるのか?と調べると、、、
{
    NSImage *image = sceneView.snapshot;
}
↑このようなシンプルな方法がある。
ここでsceneViewはSCNViewオブジェクト。
snapshotはSCNViewのプロパティなのでNSViewなどでは使えない。

SCNViewをsnapshotでスクショを得た結果の画像

↑snapshotで得たNSImageオブジェクトを半分のサイズにして表示した。
このsnapshotでもいいのだが、全画面も必要ないし画面の一部をNSRectとかで指定して得られないのか?とさらに調べたところ、、、
{
    NSImage *image = [[NSImage alloc] initWithData:[sceneView dataWithPDFInsideRect:rect]];
}
↑こういう方法があった。rectはNSRectでこれでビューの任意の場所、サイズでいけるやん!と思ったのだがこれはSCNViewには使えないっぽい。
‘PDF’以外にも似たようなメソッドがあるけど同じくダメだった。
NSViewのスクショを得た画像
↑NSView(※)に対しては動いたんだが。惜しい!
SCNViewはNSViewのサブクラスだけど、ダメなんだな。

結局、SCNViewからスクリーンショットを得るのはsnapshotでやることにした。


(※)
画像はNSViewにNSImageViewとNSTextFieldを置いたもので、任意の位置で切り出したスクリーンショットを得ている。


version memo
macOS High Sierra 10.13.6


スポンサーサイト

<< 奥河内くろまろの郷で自転車借りてサイクリングしてきた  TopPage  Automatorとショートカットを使い文字数を数える >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1218-1f2fa683




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad