2017-02-19 8 views
2

mac用の拡大鏡のようなアプリケーションを開発しています。私の目標は、ズームイン時に個々のピクセルを特定できるようにすることです、私は(イベントに:NSEvent):のmouseMovedでこのコードを使用しています。ズーム時にCGWindowListCreateImageがぼやけたcgImageを生成します

let captureSize = self.frame.size.width/9  //9 is the scale factor 
let screenFrame = (NSScreen.main()?.frame)! 
let x = floor(point.x) - floor(captureSize/2) 
    let y = screenFrame.size.height - floor(point.y) - floor(captureSize/2) 

    let windowID = CGWindowID(self.windowNumber) 

cgImageExample = CGWindowListCreateImage(CGRect(x: x, y: y, width: captureSize, 
height: captureSize), CGWindowListOption.optionOnScreenBelowWindow, windowID, 
CGWindowImageOption.bestResolution) 

cgImageの作成がCGWindowListCreateImage方法で行われます。私は後でNSViewの中でこれを描くと、その結果は次のようになります。いくつかのアンチエイリアシングがcgImageの作成時に適用されたよう

enter image description here

それは/ぼやけて見えます。私の目標は、各ピクセルの鮮明な表現を得ることです。誰かが私を正しい方向に向けることができますか?

答えて

2

わかりました。これは、描画コンテキストにnoneに補間品質を設定する問題だった:

context.interpolationQuality = .none 

結果:要求に

enter image description here

いくつかのより多くのコード:

//get the context 
guard let context = NSGraphicsContext.current()?.cgContext else { return } 

//get the CGImage 
let image: CGImage = //pass the result from CGWindowListCreateImage call 

//draw 
context.draw(image, in: (CGRect of choice)) 
+0

親愛なる@Tuslareb、あなたはとても親切で、「文脈」の例を提供してくださいますか?私は同じ問題に直面しています。私は 'CGWindowListCreateImage'を使ってスクリーンショットを生成しますが、ズームしたときにCGImageがぼやけます。私は基本的にスクリーンショットを 'NSImage'に変換し、それをImageView内に表示します。 – ixany

+0

@ixanyいくつかのサンプルコードで私の答えを更新しました。基本的には、カスタムNSViewのdrawRectメソッドのCGWindowListCreateImage呼び出しから取得したCGImageを描画します。どのCGWindowImageOptionをCGWindowListCreateImageコールで使用しますか? – Tuslareb

関連する問題