Така че работя върху малко приложение за „рисуване“, където потребителят може да рисува изображения върху мрежово платно (основно създавайки пикселно изкуство). Исках да създам функция, която експортира това платно (Смятайте, че това е масив от UIColor
s, който след това конвертирам в RawPixel
, прост цветен контейнер, който ми трябва, защото действителните RGB стойности трябва да бъдат UInt8
, за да мога да го запазя в CGI изображение).
Дотук добре. Това, което исках да направя, беше да дам на потребителя опцията да запази текущата си рисунка като изображение в Photos. И тук започва въпросът. Това е изображението, което е нарисувано на екрана:
Но когато експортирам това, ето как изглежда изображението... супер размазано и много мъничко. Сега, с мъничкото, с което мога да работя, но размазването не знам как да го коригирам.
Всъщност взех генерираното CGImage
и го поставих в UIImageView
и зададох imgViewQR.layer.magnificationFilter = kCAFilterNearest
и тогава изглеждаше кристално ясно. Но искам това конкретно поведение да продължи, когато запазя чертежа в приложението Снимки. Наистина не знам къде да търся, така че всяка помощ ще бъда много благодарна!!!
Това е методът, който използвам за зареждане на „платното“ със свързаните цветове и как го запазвам в Photos.
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)