我正在尝试创建纯粹的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()相同的目的。
这里有明显的问题吗?或者有更好的方法来获取图像的像素颜色吗?
任何帮助都会感激不尽。
答案 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
似乎按预期工作。