Можно ли вставить фильтр CIBumpDistortion в определенную область экрана в Mac OS X (Snow Leopard)? - PullRequest
2 голосов
/ 10 октября 2010

Я хочу временно исказить область под мышью, используя CIBumpDistortion, чтобы увеличить видимость указателя мыши.

На данный момент у меня есть прозрачный фон NSWindow, который плавает под указателем и показывает перекрестие, которое исчезает при перемещении мыши и исчезает при остановке. Это работает хорошо, но искажение Bump сделает мое приложение удивительным вместо достаточно хорошим .

Я пытался использовать CGDisplayCaptureWithOptions(display, kCGCaptureNoFill), но это снижает производительность при сканировании и делает указатель мыши заикающимся.

Вот изображение приблизительно того, чего я пытаюсь достичь.

Обратите внимание, область, которую я хочу исказить, находится не внутри моей NSWindow, поэтому я не думаю, что могу просто применить преобразование к CIImage и отобразить это (если один из вас, умные люди, не покажет мне, Вы можете скопировать растровое изображение из произвольной области экрана?)

Заранее спасибо!

1 Ответ

4 голосов
/ 10 октября 2010

Обратите внимание, область, которую я хочу исказить, находится не внутри моего собственного NSWindow, поэтому я не думаю, что могу просто применить преобразование к CIImage и показать это (если один из вас, умные люди, не покажет мне, что выможно скопировать растровое изображение из произвольной области экрана?)

Может сделать!

Получите windowNumber вашего окна и используйте CGWindowList для создания скриншота CGImage всего, что находится под ним.,Затем создайте CIImage из CGImage, пропустите его через фильтр и установите для выходного изображения то, что отображается в вашем окне.

При условии, что вы делаете это только тогда, когда мышь перемещается или экран перерисовывается в области вокругкурсор (вы можете зарегистрировать обратный вызов обновления экрана для последнего), вы можете сделать это довольно эффективно.

...