Итак, я работал над небольшим приложением для «рисования», в котором пользователь может рисовать изображения на сетке холста (в основном создавая пиксельную графику). Я хотел создать функцию, которая экспортирует этот холст (считайте, что это массив UIColor
, который я затем конвертирую в RawPixel
, простой цветовой контейнер, который мне нужен, потому что фактические значения RGB должны быть UInt8
, поэтому я могу сохранить его в CGImage).
Все идет нормально. Я хотел дать пользователю возможность сохранить свой текущий рисунок как изображение в Фото. И вот тут начинается проблема. Это изображение, которое рисуется на экране:
Но когда я экспортирую это, изображение выглядит так... очень размытое и очень маленькое. Теперь, с крошечностью, с которой я могу работать, но с размытостью, которую я не знаю, как исправить.
На самом деле я взял сгенерированный CGImage
, поместил его в UIImageView
и установил imgViewQR.layer.magnificationFilter = kCAFilterNearest
, и тогда он выглядел кристально чистым. Но я хочу, чтобы это конкретное поведение сохранялось, когда я сохраняю рисунок в приложении "Фотографии". Я действительно не знаю, где искать, поэтому любая помощь будет принята с благодарностью!!!
Это метод, который я использую для загрузки «холста» с соответствующими цветами и того, как я сохраняю его в «Фотографии».
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)