頭と尻尾はくれてやる!

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


macOSでSCNView→png画像を作成、保存する

SCNViewの表示内容からpng画像を作って保存したかったんだ。なおNSSavePanelは使わない。
散々回り道したけど、こんな感じ。

{
    //(1)
    NSImage *image = [sceneView snapshot];
	
    //(2)
    NSData *imageData = [image TIFFRepresentation];
    NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithData:imageData];
    NSDictionary *imageProps = [NSDictionary dictionary];
    imageData = [imageRep representationUsingType:NSPNGFileType properties:imageProps];

    //(3)
    NSFileManager *fm = [NSFileManager defaultManager];
    NSURL *url =[fm homeDirectoryForCurrentUser];
    NSString *path = [url path];
    NSString *pathStr = [path stringByAppendingPathComponent: @"images/screenshot.png"];

    //(4)
    NSError *error = nil;
    if (![imageData writeToFile:pathToDesktop options:NSAtomicWrite error:&error]) {
        NSLog(@"%@",error);
    }
}
(1)まずNSImageオブジェクトを作る。snapshotで一撃。
(2)NSImageオブジェクトからNSDataオブジェクトを作る。調べるといろんなやり方があるみたい。propertiesに渡すのもなくてもいけそう(でもnilだと警告が出る)。
(3)保存先、ファイル名を指定。imagesってフォルダーを作ってそこに入れてる。
(4)保存。ダメならエラー表示。

sandbox設定
↑XcodeのTarget設定のところのApp SandboxをONにしてる場合、保存先が限られてデスクトップなどには保存できない。
{
    NSString *pathToDesktop = [NSString stringWithFormat:@"/Users/%@/Desktop/screenshot.png", NSUserName()];
}
↑保存先にデスクトップを指定すると

Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “screenshot.png” in the folder “Desktop”.

なんてエラーになる。ただしサンドボックスをOFFにしておけばデスクトップにも保存できた。なおNSSavePanelを使えばサンドボックスON/OFF関係なくどこでも保存できるみたい。

macOSのサンドボックスについてもっと勉強せねば。

<< iOSで出力したファイルをAirDropでMacに送信する  TopPage  サイズの合わない窓用エアコンを取り付けた >>

コメント


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

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1100-962b6380




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

FC2Ad