2016-12-25 3 views
1

Я делаю приложение для редактирования изображений в iOS и используя быструю библиотеку GPUImage2. Здесь я собираюсь внедрить некоторые фильтры, которые будут просматриваться в виде uicollectionview, как традиционные приложения для редактирования изображений.GPUImage 2 фильтры в collectionview

Я сгенерировал изображение с изображением 50x50 для коллекции, а затем применил к нему фильтры. Моя фильтрации кода:

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; 

    } 

, что я делаю здесь я делаю отфильтрованный UIImage и добавление их в CollectionView массива данных, а затем перезаряжать его. Я не уверен, что это хорошая идея или нет. Но проблема в том, что я получаю только первый фильтр, применяемый ко всем из них.

Output i m getting

Когда я инициализировать pictureOutput перед применением каждого фильтра я получить красные изображения ... и его даже не гладко при открытии ViewController.

output

Так я думаю, что я мог бы делать это в неправильном направлении. Я havent нашел хороший ресурс для обработки этого в коллекции. Было бы лучше, если бы кто-нибудь мог показать мне проект git или учебник или что-то в этом роде. Кроме того, любой вид предложения приветствуются

Благодаря

ответ

0

Попробуйте создать другую ячейку для каждой строки, потому что .. Я думаю, что проблема заключается в reuseIdentifier .. его повторное использование ImageView .. и перекрывая их .. попытаться создать ячейку без reuseIdentifier.

Ex.

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

ИЛИ

Попробуйте создать другой объект для этих 3 imageViews вместо использования 1.

Как

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

Я сделал это, но я получаю красные изображения и производительность немного медленный .... PLS проверить красные изображения в вопросе ... теперь im обработки только 3, но позже будет обрабатывать больше .... – coder

+0

ОК .. вы можете поставить вам код метода CellForIndex? – NehaK

+0

Я добавил метод cellForIndex к моему вопросу .... – coder

Смежные вопросы