2017-02-08 6 views
0

Ich möchte einen Farbwähler erstellen. Also dachte ich, NSReadPixel wäre ein guter Ansatz, um die Pixelfarbe zu erhalten. Also, was ich im Grunde tat, war dies:NSReadPixel() gibt immer Null

class CustomWindowController: NSWindowController { 

    override func mouseMoved(with event: NSEvent) { 

     let mouseLocation = NSEvent.mouseLocation() 
     let pickedColor = NSReadPixel(mouseLocation) 

    } 

} 

Aber pickedColor immer wieder nil. Auch wenn ich versuche, mit einem festen Punkt (zu Testzwecken) "readPixel" zu lesen, gibt es immer noch nil zurück. Was vermisse ich?

EDIT # 1

ich den NSBitmapImageRep/colorAt Ansatz aus den Antworten und bemerkte befolgt habe, dass die resultierende NSColor ein wenig anders zu sein scheint (in den meisten Fällen heller), dass es sein soll (nehmen eine schau dir den Screenshot an). Muss ich Farbräume oder so berücksichtigen? (? Und wie)

enter image description here

EDIT # 2

Verstanden arbeiten - bitmap.colorSpaceName = NSDeviceRGBColorSpace der Trick funktioniert.

Antwort

1

Es funktioniert wirklich nicht. Ich benutze diesen Code für die Pixelfarbe

NSPoint _point = [NSEvent mouseLocation]; 

CGFloat x = floor(_point.x); 
CGFloat y = [NSScreen mainScreen].frame.size.height - floor(_point.y); 
//it needs because AppKit and CoreGraphics use different coordinat systems 

CGWindowID windowID = (CGWindowID)[self windowNumber]; 

CGImageRef pixel = CGWindowListCreateImage(CGRectMake(x, y, 1, 1), kCGWindowListOptionOnScreenBelowWindow, windowID, kCGWindowImageNominalResolution); 

NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCGImage:pixel]; 
CGImageRelease(pixel); 

NSColor *color = [bitmap colorAtX:0 y:0]; 
+0

Funktioniert einwandfrei. Ich danke dir sehr! – ixany

+0

Ich habe festgestellt, dass die resultierende Farbe nicht genau die selbe ist wie im ausgewählten Pixel (siehe meine Bearbeitung oben). Würdest du bitte so nett sein und es dir anschauen? Danke im Voraus! :) – ixany

+0

Versuchen Sie es zu kalibrieren - erstellen Sie ein Bild mit souverän verschiedenen Farben und erkunden Sie mit Ihrem Picker. Sei x ± 1 y ± 1 löse dein Problem. –

Verwandte Themen