2010-10-10 17 views
2

Je veux temporairement déformer la zone sous la souris en utilisant un CIBumpDistortion pour augmenter la visibilité du pointeur de la souris.Est-il possible d'injecter un filtre CIBumpDistortion dans une zone spécifique de l'écran sur Mac OS X (Snow Leopard)?

À l'heure actuelle, j'ai un arrière-plan transparent NSWindow qui flotte sous le pointeur et montre un réticule qui s'estompe lorsque vous déplacez la souris, et lorsque vous vous arrêtez. Cela fonctionne bien, mais une distorsion de bump ferait mon application génial au lieu de assez bon.

J'ai essayé d'utiliser CGDisplayCaptureWithOptions(display, kCGCaptureNoFill), mais cela réduit les performances à une analyse et rend le pointeur de la souris bégaie.

Voici an image d'environ ce que j'essaie d'atteindre. Notez que la zone que je veux distordre n'est pas à l'intérieur de la mienne NSWindow, donc je ne pense pas que je puisse simplement appliquer une transformation à un CIImage et l'afficher (à moins que l'un de vous ne me montre que vous pouvez copier un bitmap d'une zone arbitraire de l'écran?)

Merci d'avance!

Répondre

4

Notez la zone que je veux déformer est pas dans mon propre NSWindow, donc je ne pense pas que je peux appliquer une transformation à un CIImage et afficher que (à moins de vous intelligent gens me montre que vous peut copier un bitmap à partir d'une zone arbitraire de l'écran?)

Can do!

Obtenez windowNumber de votre fenêtre, et utilisez CGWindowList pour créer une capture d'écran CGImage de tout ce qui se trouve en dessous. Ensuite, créez un CIImage à partir de la CGImage, exécutez-le à travers le filtre, et définissez l'image de sortie comme ce que votre fenêtre affiche. Si vous ne faites cela que lorsque la souris se déplace ou que l'écran se redessine dans la zone autour du curseur (vous pouvez enregistrer un rappel d'actualisation d'écran pour ce dernier), vous pouvez le faire de façon efficace.