頭と尻尾はくれてやる!

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


NSImageから白黒画像のデータが欲しい(2)

NSImageから白黒画像のデータが欲しい(1)
↑この続き。
そもそも欲しいのは白黒画像ではなく、白黒画像のデータなのだ。
Metal Performance Shadersで入力画像としてNSImageオブジェクトがあれば、それを
(void *)data
としてデータ列にして↓このようにMPSImageに突っ込む。
{
    [srcImage.texture replaceRegion:srcImageRegion
                                  mipmapLevel:0
                                        slice:0
                                    withBytes:data
                                  bytesPerRow:28*sizeof(float)
                                bytesPerImage:0];
}
macOSで画像の輝度データを得る
↑ここでも書いてた。

なので、実は白黒画像のNSImageオブジェクトが必要なわけではない。だーっとならんだデータ列が欲しいのだ。
ということでiOSで使っていたコードを参考に次のようなコードを書いてみた。
{
    NSImage *image = sceneView.snapshot;//スクショをカラー画像で得る
    
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
    CGImageAlphaInfo bitmapInfo = kCGImageAlphaNone;
    
    CGContextRef context = CGBitmapContextCreate(nil,
                                                 width,
                                                 height,
                                                 8,
                                                 width,
                                                 colorSpace,
                                                 bitmapInfo);
    
    NSRect imageRect = NSMakeRect(0, 0, width,height);
    NSGraphicsContext *gctx = [NSGraphicsContext graphicsContextWithCGContext:context flipped:NO];
    [NSGraphicsContext setCurrentContext:gctx];
    [image drawInRect:imageRect];
    
    void *data = CGBitmapContextGetData (context);
 

    //dataを使った処理


    //メモリ解放
    CGColorSpaceRelease(colorSpace);
    CGContextRelease(context);
}
snapshotで得たカラー画像を白黒画像のcolor spaceを持つcontextにdrawする、というなんとも強引なのだが、、、

スクショを白黒画像にして表示した結果

↑確認のためvoid *data→NSImage→NSImageViewとして半分のサイズで重ねて表示してる。ちゃんと白黒画像になる。この白黒画像のcolor spaceを確認すると
kCGColorSpaceICCBased; kCGColorSpaceModelMonochrome; Generic Gray Gamma 2.2 Profile
と出るので輝度情報しかもたない真っ当な白黒画像だ。


version memo
macOS High Sierra 10.13.6


追記
本記事でデータ列からNSImageを作成してるが、そのコードはこちらに↓
データ列からNSImageオブジェクトを作成する


スポンサーサイト

<< データ列からNSImageオブジェクトを作成する  TopPage  NSImageから白黒画像のデータが欲しい(1) >>

コメント


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

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1221-6a507817




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

FC2Ad