2017-01-30 16 views
0

純粋なJXA-ObjCアプローチを作成して画像パスからピクセルカラーを取得しようとしています。私が現在持っているものは次のとおりです。img.lockFocusはObjCブリッジ経由でアクセスできませんか?

ObjC.import('Foundation') 
ObjC.import('AppKit') 
var c_filePath = $(picturePath) 
var c_img = $.NSImage.alloc.initWithContentsOfFile(c_filePath) 
if(c_img==$()){ 
    return [] 
} 
var c_point = $.NSMakePoint(x,y) 
c_img.lockFocus()  //Error - Undefined is not a function...? 
var c_color = NSReadPixel(c_point) 
c_img.unlockFocus() //Error - Undefined is not a function...? 
c_img.release() 

var r; var g; var b; var a 
c_img.getRegGreenBlueAlpha($(r),$(g),$(b),$(a)) 

r = ObjC.unwrap(r) 
g = ObjC.unwrap(g) 
b = ObjC.unwrap(b) 
a = ObjC.unwrap(a) 

このコードは、大きくthe code found hereに基づいています。

ただし、上記のように、c_img.lockFocus()はJXAでは定義されていません。奇妙なことに、私はc_img.lockFocusFlipped()へのアクセス権を得ることができますが、これを使用する方法やlockFocus()と同じ目的で使用できるかどうかはわかりません。

ここに明らかな問題はありますか?または画像のピクセルの色を取得するより良い方法はありますか?

ご協力いただければ幸いです。

答えて

0

私はあまりにも括弧を必要とするメソッドに慣れているようです。 TylerGawしかし、これは必ずしもそうではないと私に言った。

ObjC.import('Foundation') 
ObjC.import('AppKit') 
var c_filePath = $(picturePath) 
var c_img = $.NSImage.alloc.initWithContentsOfFile(c_filePath) 
if(c_img==$()){ 
    return [] 
} 
var c_point = $.NSMakePoint(x,y) 
c_img.lockFocus 
var c_color = NSReadPixel(c_point) 
c_img.unlockFocus 
c_img.release 

が期待通りに機能するように見えます。

関連する問題