2017-02-08 13 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을 반환합니다. 내가 뭘 놓치고 있니?

나는 그것이해야한다고 응답에서 NSBitmapImageRep/colorAt 접근 방식을 따라하고 결과 NSColor이 (밝은 대부분의 경우에) 조금 다른 것 같다 것으로 나타났습니다 1

편집 # (ㄱ을 스크린 샷을보세요). colorSpaces 등을 고려해야합니까? (? 방법) 2

enter image description here

편집 번호는 작동있어 - 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 일 수 있습니다. –