2017-09-05 4 views
0

J'utilise GPUImage sur iOS. Je rencontre des problèmes pour transformer (mettre à l'échelle) une GPUImagePicture avec GPUImageTransformFilter et la fusionner dans une vidéo.GPUImage - Correspondance de GPUImageTransformFilter pour corriger la taille pour le mélange

overlayImage = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"Sticker"] smoothlyScaleOutput:YES]; 

blendFilter = [GPUImageAlphaBlendFilter new]; 

transformFilter = [GPUImageTransformFilter new]; 
// [transformFilter forceProcessingAtSize:?????]; 
transformFilter.affineTransform = CGAffineTransformMakeScale(0.2f, 0.2f); 

[overlayImage addTarget:transformFilter]; 

[videoCamera addTarget:blendFilter]; 
[overlayImage addTarget:blendFilter]; 

[overlayImage processImage]; 
[videoCamera startCameraCapture]; 

Le résultat incorrect, je reçois est que l'image montre non transformé - il est toujours en taille réelle, comme si le filtre transformation n'a jamais été appliqué.

Est-il correct que le GPUImagePicture transformé doit être traité à la même taille exacte que l'autre contenu du filtre de mélange?

Si oui, comment faire? Dois-je utiliser forceProcessingAtSize? Et puis-je obtenir la taille en interrogeant quelque chose, comme la session de videoCamera? J'ai essayé de définir forceProcessingAtSize à la taille de AVCaptureSessionPreset, 640x480, mais cela n'a pas aidé.

Merci

Répondre

1

Vous n'êtes pas connecté le transformFilter dans le code ci-dessus pour quoi que ce soit, il est ignoré. Je crois que vous devez corriger votre code pour lire

[overlayImage addTarget:transformFilter]; 

[videoCamera addTarget:blendFilter]; 
[transformFilter addTarget:blendFilter]; 

si vous voulez que vos résultats transformés soient mélangés.

forceProcessingAtSize ne fera pas vraiment ce que vous voulez ici, car cela ajuste la taille des pixels sous-jacents et non pas comment elle est présentée pour un mélange. Les filtres de fusion utilisent le rapport d'aspect de la première image, puis étirent la deuxième image pour l'ajuster. C'est une conséquence des coordonnées de texture normalisées assez simples que j'utilise, et je n'ai malheureusement jamais ajouté les options pour conserver les proportions dans la seconde image.

+0

Merci pour votre réponse - J'aime GPUImage! Le problème que j'avais lors de l'ajout du filtre de fusion en tant que cible pour le filtre de transformation était que la sortie entière était juste blanche, et j'avais vu quelques exemples de code ailleurs qui ne transformaient jamais transformfilter.addTarget lors du traitement d'une image fixe. Je pensais que je faisais juste la mauvaise chose en ajoutant des cibles au filtre de transformation. – Cloov