2
実際にはアルファチャンネルで黒くなっている巨大な32ビットPNGを取り込み、iOSアプリでメモリにやさしい方法で提示しようとしています。kCGImageAlphaOnlyレンダリングされたCGImageの色を変更します
は「アルファのみ」CGContextに私は画像を再レンダリングしようとしたことを実行します。
extension UIImage {
func toLayer() -> CALayer? {
let cgImage = self.cgImage!
let height = Int(self.size.height)
let width = Int(self.size.width)
let colorSpace = CGColorSpaceCreateDeviceGray()
let context = CGContext(data: nil, width: width, height: height, bitsPerComponent: 8, bytesPerRow: width, space: colorSpace, bitmapInfo: CGImageAlphaInfo.alphaOnly.rawValue)!
context.draw(cgImage, in: CGRect(origin: .zero, size: self.size))
let image = context.makeImage()!
let layer = CALayer()
layer.contents = image
layer.contentsScale = self.scale
return layer
}
}
これは素晴らしいです!メモリ使用量は180MBから約18MBに減少しました。これは実際に予想したよりも優れています。
画像の黒色(または、今は不透明な)部分はもはや黒色ではなく、白色であるという問題があります。
不透明なビットの色を変更するのは簡単な修正が必要なようですが、私はオンラインでその情報を見つけることができません。アイデアはありますか?