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

时间:2018-01-01 07:23:52

标签: ios swift uiimage gpuimage core-image

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

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

但是,我的代码在触摸设置按钮后保存红色图像(相同尺寸,仅填充红色)。

我的应用。包括一个RenderView IBOutlet和两个IBAction(设置按钮和保存按钮)。

这是我的完整源代码。

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

        final ActivityManager activityManager = (ActivityManager) 
        getSystemService(Context.ACTIVITY_SERVICE);
        final List<RunningTaskInfo> recentTasks = activityManager.getRunningTasks(Integer.MAX_VALUE);
        View linearLayout =  findViewById(R.id.info);

        for (int i = 0; i < recentTasks.size(); i++) 
         {
            TextView valueTV = new TextView(this);
            valueTV.setText(recentTasks.get(i).baseActivity.toShortString()+ "\t\t ID: 
      "+recentTasks.get(i).id);
            valueTV.setId(i);
            valueTV.setLayoutParams(new   LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));

            ((LinearLayout) linearLayout).addView(valueTV);

        }

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

enter image description here

它显示我的代码在触摸设置按钮后成功呈现过滤后的图像enter image description here

它显示我的代码在触摸设置按钮后无法保存已过滤的图像(但尺寸相同且仅填充红色)

enter image description here

1 个答案:

答案 0 :(得分:0)

我解决了这个问题! 我添加了一个可选的UIImage(tempImage),用于暂时保存在内存中。 当调用“saveButtonDown()”时,我检查tempImage是否为nil。 如果它是nil,我只打印一条错误消息(No Image)。 如果它不是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()
    }
}