FC2ブログ

頭と尻尾はくれてやる!

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


NSImageからCGImageを得る

macOSアプリでNSImageオブジェクトからCGImageRefを得る方法。
いくつかある方法を試してみた。
{
    CGImageSourceRef source = CGImageSourceCreateWithData((CFDataRef)[nsimage TIFFRepresentation], NULL);
    CGImageRef cgimage =  CGImageSourceCreateImageAtIndex(source, 0, NULL);

    //解放
    CGImageRelease(cgimage);
    CFRelease(source);
}
↑この方法だとメモリの解放が必要なのでやや使いにくい。

+(CGImageRef)cgimageFromNSImage:(NSImage *)nsimage;
↑こういう形のメソッドにしたくてもできないし(いい方法あれば教えてください)。


+(CGImageRef)cgimageFromNSImage:(NSImage *)nsimage
{
    CGImageRef cgimage = [nsimage CGImageForProposedRect:NULL context:NULL hints:nil];
    return cgimage;
}
↑この方法だとメモリの解放が不要なのでメソッドの形にしておける。
なお、ここで使っているメソッドの引数である NSRect *proposedDestRect の部分だけど、NSRectを変えたらその位置とサイズを指定できるのかと思ったけどそういうものでもないらしい。NULLを与えるとNSImageオブジェクト全体を示すとリファレンスにはあるのだが。

{
    NSImage *nsimage = [[NSImage alloc] initWithCGImage:cgimage size:size];
}
↑なお逆にCGImageRefからNSImageオブジェクトを作成するにはこれでOK。


参考サイト
objective c - Turning an NSImage* into a CGImageRef? - Stack Overflow

<< macOSのSpriteKitでマウスカーソルの位置を得る  TopPage  CreateMLで作成したmlmodelを使いCoreMLで予測する >>

コメント


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

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1239-e93c82b1




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

FC2Ad