2011-10-30 4 views
1

J'ai recherché cette réponse pendant un certain temps. Mais je n'ai pas réussi à le trouver.Moyenne de plusieurs UIImages

Je voudrais faire la moyenne des pixels de 30 UIimages. Pour ce faire, je voudrais le faire en utilisant Quartz2D au lieu de parcourir tous les pixels de toutes les images. Il m'est apparu que, pour peindre 30 images ensemble, je devrais ajuster le canal alpha de chacune d'elles à 1/30. Ensuite, après avoir peint l'un dans l'autre, j'obtiendrais l'effet désiré.

la formule souhaitée doit être: Dest Px = (img [0] + .... .px img [29] .px)/30

j'ai essayé d'y parvenir en utilisant un ImageContext et le mélange des images ensemble avec pas de chance:

UIGraphicsBeginImageContext(CGSizeMake(sz.width, sz.height)); 

for (int i=0; i<30; i++) { 

    UIImage* img = [self.delegate requestImage:self at:i]; 

    CGPoint coord = [self.delegate requestTranslation:self at:i]; 

    [img drawAtPoint:coord blendMode:kCGBlendModeNormal alpha:1/30]; 

} 

UIImage* im = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

Comment est-ce que je pourrais obtenir une image moyennée de beaucoup d'UIimages? J'ai aussi essayé d'ajouter une image avec de nombreuses sous-couches, mais j'ai aussi des images délavées.

Merci!

Répondre

1

Essayez de changer les éléments suivants:

[img drawAtPoint:coord blendMode:kCGBlendModeNormal alpha:1/30]; 

à

[img drawAtPoint:coord blendMode:kCGBlendModeNormal alpha:1.0/30.0]; 

1/30 (en utilisant des valeurs entières) == 0, donc vous dessinerez les images complètement transparent. En ajoutant le .0, vous clarifiez que vous voulez un CGFloat.

+1

Merci, j'ai trouvé le problème. J'avais besoin d'un mélange progressif: appliquer alpha 1.0 à la première image, 0.5 à la seconde, 0.33 à la troisième et ainsi de suite. C'est parce que le mélange est appliqué à l'arrière-plan. – user1021161

Questions connexes