2017-02-19 15 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

좋아, 알아 냈어. 그것은 드로잉 컨텍스트에 없음으로 보간 품질을 설정하는 문제였다 :

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 몇 가지 예제 코드로 답변을 업데이트했습니다. 기본적으로, CGWindowListCreateImage 호출에서 얻은 CGImage를 사용자 정의 NSView의 drawRect 메소드에서 그립니다. 어떤 CGWindowImageOption을 CGWindowListCreateImage 호출에서 사용합니까? – Tuslareb