gpt4 book ai didi

ios - 直接渲染CGImage(而不是UIImage)?

转载 作者:行者123 更新时间:2023-12-02 04:04:41 25 4
gpt4 key购买 nike

我正在制作一个CGImage

func otf() -> CGImage {

这是渐变上的贝塞尔蒙版。所以,

    // the path
let p = UIBezierPath()
p.moveTo etc

// the mask
let m = CAShapeLayer()
set size etc
m.path = p.cgPath

// the layer
let l = CAGradientLayer()
set colors etc
l.mask = m

已经完成了。然后以通常的方式渲染 UIImage ...

    UIGraphicsBeginImageContextWithOptions(sz.size, false, UIScreen.main.scale)
l.render(in: UIGraphicsGetCurrentContext()!)
let r = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()

但是。然后要返回它,当然你必须转换为CGImage

    return r.cgImage!

(如果您使用类似的东西,同样的交易。

UIGraphicsImageRenderer(bounds: b).image { (c) in v.layer.render(in: c) }

..您得到的是 UIImage,而不是 CGImage。)

似乎应该有一种更好/更优雅的方法 - 有没有某种方法可以更直接地“构建 CGImage”,而不是“构建 UIImage,然后转换”强>”?

最佳答案

需要创建CGContext来生成直接CGImage

注意:- 使用此代码创建直接 CGImage

func createImage() -> CGImage? {
// the path
var p = UIBezierPath()
p = UIBezierPath(arcCenter: CGPoint(x: 100,y: 100), radius: CGFloat(200), startAngle: CGFloat(0), endAngle:CGFloat(Double.pi * 2), clockwise: true)


// the mask
let m = CAShapeLayer()
m.path = p.cgPath

// the layer
let layer = CAGradientLayer()
layer.frame = CGRect(x: 0, y: 0, width: 200, height: 200)
layer.colors = [UIColor.red.cgColor, UIColor.black.cgColor]
layer.mask = m



let imageSize = CGSize(width: 200, height: 200)

let colorSpace = CGColorSpace(name: CGColorSpace.sRGB)!
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
guard let context = CGContext(data: nil, width: Int(imageSize.width), height: Int(imageSize.height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo.rawValue) else { return nil }

layer.render(in: context)
let img = context.makeImage()
return img
}

关于ios - 直接渲染CGImage(而不是UIImage)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59592933/

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