2017-02-08 22 views
0

Я хочу создать подборщик цветов. Поэтому я подумал, что использование NSReadPixel будет хорошим подходом к получению цвета пикселей. Так что я в основном сделал это:NSReadPixel() всегда возвращает nil

class CustomWindowController: NSWindowController { 

    override func mouseMoved(with event: NSEvent) { 

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

    } 

} 

Но pickedColor всегда возвращает nil. Даже если я попытаюсь «readPixel» с фиксированной точкой (для целей тестирования), он все равно возвращает nil. Что мне не хватает?

EDIT # 1

Я следовал NSBitmapImageRep/colorAt подход от ответов и заметил, что в результате NSColor, кажется, немного отличается (в большинстве случаев ярче), что должно быть (взять посмотрите на скриншот). Должен ли я рассматривать colorSpaces или так? (? И как)

enter image description here

EDIT # 2

Понял работать - bitmap.colorSpaceName = NSDeviceRGBColorSpace делает трюк.

ответ

1

Это действительно не работает. Я использую этот код для получения цвета пикселя

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

Работает отлично. Спасибо огромное! – ixany

+0

Я заметил, что полученный цвет не такой же, как в выбранном пикселе (см. Мое редактирование выше). Не могли бы вы быть такими добрыми и взглянуть на него? Заранее спасибо! :) – ixany

+0

Попробуйте откалибровать его - создайте изображение с уверенно разными цветами и исследуйте с помощью своего сборщика. Может быть x ± 1 y ± 1 решить вашу проблему. –

 Смежные вопросы

  • Нет связанных вопросов^_^