2017-01-30 2 views
0

Ich versuche, einen reinen JXA-ObjC-Ansatz zum Abrufen von Pixelfarben aus Bildpfaden zu erstellen. Hier ist, was ich zur Zeit:img.lockFocus ist über die ObjC-Brücke nicht erreichbar?

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) 

Dieser Code ist stark basiert weg von the code found here.

Wie oben gezeigt, ist c_img.lockFocus() jedoch gemäß JXA nicht definiert. Seltsamerweise kann ich Zugriff auf c_img.lockFocusFlipped() erhalten, aber ich bin mir nicht sicher, wie man das benutzt und/oder ob es für den gleichen Zweck wie lockFocus() verwendet werden kann.

Gibt es hier ein offensichtliches Problem? Oder gibt es eine bessere Möglichkeit, die Pixelfarbe eines Bildes zu erhalten?

Jede Hilfe wäre dankbar.

Antwort

0

Es sieht so aus, als wäre ich zu sehr an Methoden gewöhnt, die Klammern benötigen. TylerGaw sagte mir jedoch, dass dies nicht unbedingt der Fall ist.

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 

scheint wie erwartet zu funktionieren.

Verwandte Themen