2017-02-19 6 views
2

Я разрабатываю лупу, как приложение для mac. Моя цель состоит в том, чтобы быть в состоянии точно определить отдельные пиксели при увеличении Я использую этот код в mouseMoved (с событием: NSEvent):.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, результат выглядит следующим образом:

enter image description here

Это выглядит размытым/как некоторое сглаживание было применено при создании cgImage. Моя цель - получить четкое представление каждого пикселя. Может кто-то указать мне верное направление?

ответ

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 Я обновил свой ответ с помощью некоторого примера кода. В принципе, я рисую CGImage, который я получаю из вызова CGWindowListCreateImage в методе drawRect пользовательского NSView. Какой CGWindowImageOption вы используете в вызове CGWindowListCreateImage? – Tuslareb

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