2017-02-08 18 views
0

カラーピッカーを作成したいと思います。だから私はNSReadPixelを使用すると、ピクセルの色を受け取る良いアプローチになると思った。常にnilを返しNSReadPixel()は常にnilを返します

class CustomWindowController: NSWindowController { 

    override func mouseMoved(with event: NSEvent) { 

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

    } 

} 

しかしpickedColor:だから私は基本的にやったことは、このでした。私が固定小数点(テスト目的のために)を使って "readPixel"にしようとしても、まだnilを返します。私は何が欠けていますか?私は(それが取るべきであるということの答えからNSBitmapImageRep/colorAtアプローチを踏襲し、得られNSColorは(明るく、ほとんどのケースで)少し異なるように思えることに気付きました

EDIT#1

スクリーンショットを見てください)。私は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かもしれません。 –

関連する問題