Comment récupérer le rgb d'une CIImage?
Bonjour,
Avant, j'utilisais NSBitmapImageRep pour travailler sur la couleur de l'image après traitement. Mais passé un certain volume de données, tant en taille fichier qu'en nombre d'images, ceci est contre-productif. Aussi j'essaie par les CIFilter, CIImage, etc.
Mon problème est :
- comment récupérer les valeurs rgb d'une CIImage pour pouvoir écrire mon CIFilter? Après, je dérive une classe CIFilter, etc., je devrais y arriver, mais depuis ce matin, je bloque sur cette recup. du rgb.
Je ne trouve ni l'info ni du code source! J'ai bien vu ces CIVector, mais il me faut récupérer les valeurs de l'input avant d'envoyer l'output.
(Ma méthode avec NSBitmapImageRep marche très bien, mais elle ne travaille qu'avec le processeur principal. Si j'ai bien compris la doc, CIImage travaille aussi avec la carte graphique. Est-ce exact?????)
Merci par avance )
Réponses
- Subclassing CIFilter
Explique comment combiner les CIFilters existants pour en créer de nouveaux.
- Creating Custom Filters
Explique comment écrire un CIKernel pour faire tes propres traitements.
C'est la deuxième section qui t'intéresse " du moins, si tu es certain qu'aucun CIFIlter standard ne répond à ton besoin*.
Les CIKernel sont écrits dans un sous ensemble de GLSL (OpenGL Shading Language), je te laisse jeter un oe“il à la doc. C'est un peu intimidant au début, mais tu verras que c'est assez logique et que la démarche est toujours la même.
* il y a quand même beaucoup de filtres standard, qui répondent plutôt bien aux besoins courants.
Merci Céroce. J'aurais préféré me "contenter" d'une classe CIFilter plutôt que de me lancer dans un Bundle (façon audio-unit). Effectivement, les "kernel" semblent réservés aux bundles.
J'ai essayé plusieurs filtres avec la démo "Core Image Fun House". Aucun ne me plaisait vraiment par rapport à mon projet, mais je veux surtout "faire mumuse" avec le RGB comme je fais déjà mumuse avec le son. Cela m'intéresse. J'ai déjà fait "Harmony of Colors" avec l'image (pour l'instant sous MacOS), là encore aucun filtre ne correspondait (et pour cause! à part un ou deux peut-être?). Je souhaite continuer à apprendre à maà®triser les deux : l'image et le son.
Essaie de suivre l'exemple du Haze filter.
Merci Céroce,
Effectivement, il est possible de créer une classe CIImage dans l'appli. Je suis dessus en ce moment. Cela avance lentement, mais surement...
Ai-je bien compris si je crée un fichier ".cikernel" dans lequel il y aura le code du filtre image en plus de ma classe CIImage qui va l'appeler? (Un peu comme dans l'audio on écrit la méthode audio dans un :
pas moyen sinon d'écrire le kernel en question...
Suis le tuto sur le Haze filter. Vraiment.
Merci Céroce,
J'ai bien avancé. J'utilise pour le moment un des kernel de démo qui ne nécessite que le fichier source. D'après la doc, il faut bien mettre la terminaison "cikernel" pour que la méthode fonctionne :
Mon problème est maintenant que la méthode "outputImage" du filtre m'envoie une image trop grande! Elle semble être crée si j'en crois la description de ma console, mais une image de 309 par 500 pixels donne en retours :
soit une taille totalement délirante. Je passe par NSCIImageRep pour remettre en NSImage ma CIImage, est-ce la bonne solution? (C'est celle que j'utilise déjà dans un précédent logiciel, où j'emploie les filtres d'usine) Où est le bug sinon? Pas moyen de le débusquer encore.
Le code du kernel est validé, et reconnu par la classe CIImage. Le problème vient peut-être d'une non utilisation du "ROI" dont parle la doc. Je cherche encore, mais si vous avez une idée, ce sera très sympa!
Ne vous fatiguez pas, après une nuit de sommeil, j'ai trouvé : j'oubliais d'ajouter
à la méthode du outputImage. Je ne sais pas ce que cela veut dire, mais ça marche!!
Merci encore!
Désolé Céroce, mais c'est ce qui est écrit dans la doc, c'est ce que j'ai fait, et cela marche impec. So???
Merci encore en tous les cas.