2016-12-25 2 views
1

Ich mache eine Bildbearbeitungs-App in iOS und benutze swift GPUImage2 Library. Hier werde ich einige Filter implementieren, die wie herkömmliche Bildbearbeitungs-Apps in einer uicollectionview-Vorschau angezeigt werden.GPUImage 2 Filter in Sammlungsansicht

Ich habe 50x50 thumb image für die Kollektionsansicht generiert und dann Filter angewendet. Meine Filter Codes sind:

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; 

    } 

, was ich tue hier ist i das gefilterte UIImage mache und das Hinzufügen von ihnen Datenarray zu Collection und später neu zu laden. Ich bin mir nicht sicher, ob es eine gute Idee ist oder nicht. Aber das Problem ist, ich bekomme nur den ersten Filter, der auf alle angewendet wird.

Output i m getting

Wenn ich pictureOutput initialisieren vor jeder Anwendung von Filtern erhalten i rote Bilder ... und seine nicht einmal glatt, wenn die Viewcontroller zu öffnen.

output

Also ich glaube, ich könnte es in der falschen Weise tun. Ich habe keine gute Ressource gefunden, um dies in Collectionsview zu behandeln. Es wäre besser, wenn mir jemand ein Git Projekt oder Tutorial zeigen könnte. Auch jede Art von Anregungen geschätzt

Dank

Antwort

0

Versuchen verschiedene Zell für jede Zeile zu erstellen, da .. Ich denke Problem in reuseIdentifier ist .. seine Wiederverwendungsimageview .. und überlappende sie .. versuchen Zelle zu erstellen ohne reuseIdentifier.

Ex.

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

ODER

Versuchen Sie anderes Objekt für die 3 imageViews zu schaffen anstelle von 1.

Wie

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

ich das getan habe, aber ich bin immer rot Bilder und Leistung ein wenig langsam .... pls überprüfen Sie die roten Bilder in der Frage ... jetzt im Bearbeitung nur 3, aber später wird mehr verarbeiten .... – coder

+0

ok .. können Sie setzen Sie cellForIndex Methoden-Code? – NehaK

+0

Ich habe die cellForIndex-Methode zu meiner Frage hinzugefügt .... – coder