为啥 UIImageWriteToSavedPhotosAlbum 渲染后会保存红色图像?
Posted
技术标签:
【中文标题】为啥 UIImageWriteToSavedPhotosAlbum 渲染后会保存红色图像?【英文标题】:Why did UIImageWriteToSavedPhotosAlbum save a red image after rendering?为什么 UIImageWriteToSavedPhotosAlbum 渲染后会保存红色图像? 【发布时间】:2018-01-01 07:23:51 【问题描述】:我使用 GPUImage2(https://github.com/BradLarson/GPUImage2) 编写了一个代码。
我确认我的代码在触摸设置按钮之前成功保存了图像(渲染过滤图像)。
但是,我的代码在触摸设置按钮后保存了一个红色图像(大小相同,只有红色填充)。
我的应用程序。包括一个 RenderView IBOutlet 和两个 IBActions(设置按钮和保存按钮)。
这是我的完整源代码。
点击设置按钮后如何成功保存图片?
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()
这表明我的代码在触摸设置按钮之前成功保存了图像(渲染过滤后的图像):
这表明我的代码在触摸设置按钮后成功渲染了过滤后的图像:
这表明我的代码在触摸设置按钮后无法保存过滤后的图像(但大小相同,仅填充红色):
【问题讨论】:
【参考方案1】:我解决了这个问题! 我添加了一个可选的 UIImage (tempImage),用于临时保存在内存中。 当调用“saveButtonDown()”时,我检查 tempImage 是否为 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()
【讨论】:
以上是关于为啥 UIImageWriteToSavedPhotosAlbum 渲染后会保存红色图像?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?