通过ObjC桥接无法访问img.lockFocus?

时间:2017-01-30 23:23:53

标签: objective-c applescript-objc jxa

我正在尝试创建纯粹的JXA-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

但是,如上所示,根据JXA,未定义c_img.lockFocus()。奇怪的是我可以访问c_img.lockFocusFlipped(),但是我不知道如何使用它和/或它是否可以用于与lockFocus()相同的目的。

这里有明显的问题吗?或者有更好的方法来获取图像的像素颜色吗?

任何帮助都会感激不尽。

1 个答案:

答案 0 :(得分: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

似乎按预期工作。