2016-12-25 1 views
1

Je crée une application de retouche d'image sous iOS et utilise la bibliothèque swift GPUImage2. Ici, je vais mettre en place des filtres qui seront prévisualisés dans un uicollectionview comme les applications traditionnelles de retouche d'image. J'ai généré une image pouce 50x50 pour la collection, puis j'y ai appliqué des filtres. Mes codes de filtrage sont:GPUImage 2 filtres dans collectionview

var filterOptions = [FilterOption](); 
var thumbInput: PictureInput!; 
    let meFilter = MissEtikateFilter() 
    let sketchFilter = SketchFilter(); 
    let softeleganceFliter = SoftElegance() 

    var pictureOutput = PictureOutput() 

    func thumbFilters() { 

     pictureOutput.imageAvailableCallback = {image in 
      // Do something with image 
      self.filterOptions.append(FilterOption(name: "MissEtikateFilter", image: image)) 

     } 
     thumbInput --> meFilter --> pictureOutput 
     thumbInput.processImage(synchronously: true) 


     sketchFilter.edgeStrength = 1; 
     pictureOutput.imageAvailableCallback = {image in 
      // Do something with image 
      self.filterOptions.append(FilterOption(name: "SketchFilter", image: image)) 

     } 
     thumbInput --> sketchFilter --> pictureOutput 
     thumbInput.processImage(synchronously: true) 


     pictureOutput.imageAvailableCallback = {image in 
      // Do something with image 
      self.filterOptions.append(FilterOption(name: "SoftElegance", image: image)) 

     } 
     thumbInput --> softeleganceFliter --> pictureOutput 
     thumbInput.processImage(synchronously: true) 
    } 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {    
      let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "FilterCell", for: indexPath as IndexPath) as! FilterCell 
      cell.OptionIcon.image = filterOptions[indexPath.item].image; 
      return cell; 

    } 

ce que je fais je suis ici est filtrée faire les UIImage et les ajouter à CollectionView tableau de données et rechargeant plus tard. Je ne suis pas sûr que ce soit une bonne idée ou non. Mais le problème est que je n'obtiens que le premier filtre appliqué à tous.

Output i m getting

Quand j'initialiser pictureOutput avant d'appliquer chaque filtre i obtenir des images rouges ... et son même pas lisse lors de l'ouverture du viewcontroller.

output

donc je pense que je pourrais faire dans le mauvais sens. Je n'ai trouvé aucune bonne ressource pour gérer ceci dans collectionview. Ce serait mieux si quelqu'un peut me montrer un projet git ou un tutoriel ou quelque chose. En outre toutes sortes de suggestions sont appréciés

Merci

Répondre

0

Essayez de créer différentes cellules pour chaque ligne parce que .. Je pense que question est reuseIdentifier .. sa réutilisation imageView .. et les faisant se chevaucher .. essayer de créer des cellules sans reuseIdentifier.

Ex.

cell = let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "FilterCell") 

OU

Essayez de créer différents objets pour les 3 imageViews au lieu d'utiliser 1.

Comme

func thumbFilters() { 

     var pictureOutput = PictureOutput() 

     pictureOutput.imageAvailableCallback = {image in 
      // Do something with image 
      self.filterOptions.append(FilterOption(name: "MissEtikateFilter", image: image)) 

     } 
     thumbInput --> meFilter --> pictureOutput 
     thumbInput.processImage(synchronously: true) 

     // create again 
     pictureOutput = PictureOutput() 

     sketchFilter.edgeStrength = 1; 
     pictureOutput.imageAvailableCallback = {image in 
      // Do something with image 
      self.filterOptions.append(FilterOption(name: "SketchFilter", image: image)) 

     } 

     // create again 
     pictureOutput = PictureOutput() 

     thumbInput --> sketchFilter --> pictureOutput 
     thumbInput.processImage(synchronously: true) 


     pictureOutput.imageAvailableCallback = {image in 
      // Do something with image 
      self.filterOptions.append(FilterOption(name: "SoftElegance", image: image)) 

     } 
     thumbInput --> softeleganceFliter --> pictureOutput 
     thumbInput.processImage(synchronously: true) 
    } 
+0

je l'ai fait, mais je reçois des images rouges et des performances un peu lent .... pls vérifier les images rouges dans la question ... maintenant le traitement im seulement 3, mais plus tard traitera plus .... – coder

+0

ok .. pouvez-vous mettre le code des méthodes cellForIndex? – NehaK

+0

J'ai ajouté la méthode cellForIndex à ma question .... – coder