gpt4 book ai didi

ios - 生成的 CGImage 总是模糊

转载 作者:行者123 更新时间:2023-11-30 11:16:00 31 4
gpt4 key购买 nike

所以我一直在开发一个小的“绘图”应用程序,用户可以在网格 Canvas 上绘制图像(基本上创建像素艺术)。我想创建一个导出此 Canvas 的函数(将其视为 UIColor 数组,然后将其转换为 RawPixel,这是我需要的简单颜色容器因为实际的 RGB 值需要是 UInt8 所以我可以将它保存到 CGImage)。

到目前为止一切顺利。我想做的是让用户可以选择将当前绘图作为图像保存到照片中。这就是问题开始的地方。这是在屏幕上绘制的图像:

Actual drawing

但是当我导出它时,图像看起来是这样的...... super 模糊而且非常小。现在,我可以处理微小的问题,但我不知道如何解决模糊问题。

enter image description here

我实际上已经将生成的CGImage放入UIImageView中,并设置imgViewQR.layer.magnificationFilter = kCAFilterNearest,然后它看起来晶莹剔透。但我希望当我将绘图保存到照片应用程序时,这种特殊行为能够持续存在。我真的不知道在哪里搜索,所以任何帮助将不胜感激!!!

这是我用来加载具有相关颜色的“ Canvas ”以及如何将其保存到照片的方法。

    var rawPixelArray = [RawPixel]()

guard let canvasColorArray = self.canvasView?.canvas.getPixelColorArray(),
let canvasWidth = self.canvasView?.canvas.getAmountOfPixelsForWidth(),
let canvasHeight = self.canvasView?.canvas.getAmountofPixelsForHeight() else {
return
}

canvasColorArray.forEach { (color) in
let rawPixel = RawPixel(inputColor: color)
rawPixelArray.append(rawPixel)
}

let rgbColorSpace = CGColorSpaceCreateDeviceRGB()
var data = rawPixelArray
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
guard let dataProvider = CGDataProvider(data: NSData(bytes: &data,
length: data.count * MemoryLayout<RawPixel>.size)
) else { return }

guard let exportedCGImage = CGImage.init(width: canvasWidth, height: canvasHeight, bitsPerComponent: 8, bitsPerPixel: 32, bytesPerRow: canvasWidth * (MemoryLayout<RawPixel>.size), space: rgbColorSpace, bitmapInfo: bitmapInfo, provider: dataProvider, decode: nil, shouldInterpolate: false, intent: .defaultIntent) else {
print("CGImage could not be created.")
return
}

let exportedUIImage = UIImage(cgImage: exportedCGImage)
let imageView = UIImageView(image: exportedUIImage)

UIImageWriteToSavedPhotosAlbum(imageView.image!, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)

最佳答案

好吧,所以我最终找到的解决方案如下(这有点像黑客,但它有效,而且现在涉及像素边缘时一切都非常清晰,而且您实际上可以将其导出为任何实际大小你想要的图像!):

    let exportedUIImage = UIImage(cgImage: exportedCGImage)
let imageView = UIImageView(image: exportedUIImage)
imageView.layer.magnificationFilter = kCAFilterNearest
imageView.frame = CGRect(x: 5, y: 5, width: yourDesiredWidth, height: yourDesiredHeight)
//just remember to yourDesiredWidth and yourDesiredHeight according to your actual drawing width/drawing height.

UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, imageView.isOpaque, 0.0)
imageView.drawHierarchy(in: imageView.bounds, afterScreenUpdates: true)
let snapshotImageFromMyView = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

所以我所做的是,我基本上创建一个(不可见的)UIImageView,将magnificationFilter转换为kCAFilterNearest,这会生成一个清晰的图像,然后简单地截图并将其保存到照片中。

关于ios - 生成的 CGImage 总是模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51748178/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com