Можно ли внедрить фильтр CIBumpDistortion в определенную область экрана в Mac OS X (Snow Leopard)?

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

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

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

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

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

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


person Grant    schedule 10.10.2010    source источник


Ответы (1)


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

Сможет сделать!

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

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

person Peter Hosey    schedule 10.10.2010