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

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

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

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

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

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

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


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


Ответы (1)


arrow_upward
4
arrow_downward

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

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

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

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

person Peter Hosey    schedule 10.10.2010