代码之家  ›  专栏  ›  技术社区  ›  MOV

为什么UIImageWriteToSavedPhotosAlbum在渲染后保存红色图像?

  •  1
  • MOV  · 技术社区  · 8 年前

    我用GPUImage2写了一段代码( https://github.com/BradLarson/GPUImage2 ).

    我确认我的代码在触摸设置按钮(渲染过滤后的图像)之前成功保存了图像。

    但是,我的代码在触摸设置按钮后会保存一个红色图像(大小相同,只有红色填充)。

    我的应用程序。包括一个RenderView IBMoutlet和两个iActions(设置按钮和保存按钮)。

    这是我的完整源代码。

    触摸设置按钮后如何成功保存图像?

    import UIKit
    import GPUImage
    
    class ViewController: UIViewController {
      var inputUIImage = UIImage(named: "testImage.png")
      @IBOutlet weak var renderView: RenderView!
      var pictureInput: PictureInput!
      var filterColorInversion = ColorInversion()
    
      @IBAction func setButtonDown(_ sender: UIButton) {
         pictureInput = PictureInput(image: inputUIImage!)
         pictureInput --> filterColorInversion --> renderView
        pictureInput.processImage()
      }
    
      @objc func saveImageFailedCallback(_ image: UIImage, didFinishSavingWith error: NSError?, contextInfo context: UnsafeMutableRawPointer?) {
        print("\(String(describing: error))")
      }
    
      @IBAction func saveButtonDown(_ sender: UIButton) {
        let outputImage = inputUIImage!.filterWithOperation(filterColorInversion)
        UIImageWriteToSavedPhotosAlbum(outputImage, self, #selector(saveImageFailedCallback(_:didFinishSavingWith:contextInfo:)), nil)
      }
    
      override func viewDidLoad() {
        super.viewDidLoad()
      }
    
      override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
      }
    }
    

    它显示我的代码在触摸设置按钮(渲染过滤后的图像)之前成功地保存了图像 :

    enter image description here

    它显示了我的代码在触摸设置按钮后成功地渲染了过滤后的图像 : enter image description here

    这表明我的代码在触摸设置按钮后无法保存过滤后的图像(但大小相同,仅填充红色) :

    enter image description here

    1 回复  |  直到 8 年前
        1
  •  0
  •   MOV    8 年前

    我解决了这个问题! 我添加了一个可选的UIImage(tempImage),用于临时保存在内存中。 调用“saveButtonDown()”时,我检查tempImage是否为nil。 如果是nil,我只打印一条错误消息(没有图像)。 如果不是nil,则必须在“setButtonDown()”处初始化。 这是我的完整源代码。 非常感谢。

    import UIKit
    import GPUImage
    
    class ViewController: UIViewController {
        var inputUIImage = UIImage(named: "testImage.png")
        @IBOutlet weak var renderView: RenderView!
        var pictureInput: PictureInput!
        var filterColorInversion = ColorInversion()
    
        var tempImage: UIImage?
    
        @IBAction func setButtonDown(_ sender: UIButton) {
            pictureInput = PictureInput(image: inputUIImage!)
    
            tempImage = inputUIImage!.filterWithOperation(filterColorInversion)
    
            pictureInput --> filterColorInversion --> renderView
            pictureInput.processImage()
        }
    
        @objc func saveImageFailedCallback(_ image: UIImage, didFinishSavingWith error: NSError?, contextInfo context: UnsafeMutableRawPointer?) {
            print("\(String(describing: error))")
        }
    
        @IBAction func saveButtonDown(_ sender: UIButton) {
            if (tempImage != nil) {
                UIImageWriteToSavedPhotosAlbum(tempImage!, self, #selector(saveImageFailedCallback(_:didFinishSavingWith:contextInfo:)), nil)
            } else {
                print("No Image")
            }
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }