Core Video et Transparence
anome
Membre
Bonjour,
Je voudrais utiliser des CIFilter de type BlendMode (ex: CISourceOverCompositing), mais malheureusement ces derniers modifient la transparence de mes vidéos.
Voici un exemple de superposition de 2 CVImageBuffer (issus donc de vidéos) :
Sans CIFilter / OK
Avec le CIFilter "CISourceOverCompositing" / Problème : la transparence est mauvaise
Comment faire pour que le résultat avec CIFilter ressemble à la première image ?
Merci pour votre aide et bonne journée.
Voici le code de test que j'utilise :
Je voudrais utiliser des CIFilter de type BlendMode (ex: CISourceOverCompositing), mais malheureusement ces derniers modifient la transparence de mes vidéos.
Voici un exemple de superposition de 2 CVImageBuffer (issus donc de vidéos) :
Sans CIFilter / OK
Avec le CIFilter "CISourceOverCompositing" / Problème : la transparence est mauvaise
Comment faire pour que le résultat avec CIFilter ressemble à la première image ?
Merci pour votre aide et bonne journée.
Voici le code de test que j'utilise :
<br /> glEnable( GL_BLEND );<br /> glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );<br /> <br /> if(withCiFilter) // Mauvaise transparence<br /> {<br /> CIImage *ciScreenImage = nil;<br /> if (NULL != frame1) {<br /> CIImage *image = [[CIImage imageWithCVImageBuffer:frame1] retain];<br /> ciScreenImage = image;<br /> [image release];<br /> if (NULL != frame2) {<br /> CIImage *image = [[CIImage imageWithCVImageBuffer:frame2] retain];<br /> CIFilter *filter = [CIFilter filterWithName:@"CISourceOverCompositing"];<br /> [filter setValue:image forKey:@"inputImage"];<br /> [filter setValue:ciScreenImage forKey:@"inputBackgroundImage"];<br /> ciScreenImage = [filter valueForKey:@"outputImage"];<br /> [image release];<br /> }<br /> }<br /> [ciContext drawImage:ciScreenImage atPoint:CGPointZero fromRect:[ciScreenImage extent]];<br /> }<br /><br /> else // Transparence OK<br /> {<br /> if (NULL != frame1) {<br /> CIImage *image = [[CIImage imageWithCVImageBuffer:frame1] retain];<br /> [ciContext drawImage:image atPoint:CGPointZero fromRect:[image extent]];<br /> [image release];<br /> }<br /> if (NULL != frame2) {<br /> CIImage *image = [[CIImage imageWithCVImageBuffer:frame2] retain];<br /> [ciContext drawImage:image atPoint:CGPointZero fromRect:[image extent]];<br /> [image release];<br /> }<br /> }<br />
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Merci, je viens de modifier mon post. Ma question est la suivante : comment faire pour que le résultat avec CIFilter ressemble à la première image ?
Ton code "qui marche" crée visiblement les objets à dessiner les uns à la suite des autres, et c'est bien puisque qu'ils seront dessinés ainsi dans cet ordre. Celui qui ne marche pas a deux "if" imbriqués. Je n'en vois pas l'utilité...
Ceci dit, j'ai l'habitude de travailler avec des images fixes, pas des vidéos. A priori ce doit être le même principe...
Ceci dit, je me sers de la démo "Core Image Fun House" pour tester les CIFilters, et je n'y vois pas dedans ceux que tu cites, mais bon...