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

2024-03-28

我正在做一个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。)

似乎应该有更好/更优雅的方式 - 有没有更直接的方式“构建 CG 图像”,而不是“构建 UIImage,然后转换"?


需要创建CGContext来生成直接CGImage

Note:- 使用此代码创建直接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
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

直接渲染CGImage(而不是UIImage)? 的相关文章

随机推荐

  • 在 WebDriver 方法中获取 Specflow 标签

    我正在使用 C selenium 和 Specflow 运行自动化测试套件 如果可能的话 我希望能够查看分配给当前场景的标签 以便我可以为每个场景实例化某种浏览器类型 使用 XUnit 是否可以实现这一点 登录功能文件 Feature Lo
  • 从通知打开应用程序时不清除所有通知

    根据我的要求 我想要旧的通知 我会给你一个例子 以便你更清楚 例如得到 Notification 1 Notification 2 Notification 3 然后我打开了Notification 3我不想清楚Notification 1
  • 即使使用 Unicode 源和目标 (SSIS),字符也会显示不正确

    我遇到了代码页 unicode 非 unicode 问题 需要专业知识才能理解它 在 SSIS 中 我正在从 UTF8 编码的文本文件中读取数据 数据类型均为 DT WSTR unicode 字符串 目标是 NVARCHAR 它也是 uni
  • 角度错误 - 通用类型“ModuleWithProviders”需要 1 个类型参数

    从 Angular 版本 8 升级到 10 后 运行 ngserve 命令给出错误 node modules ngx tree select src module d ts 11 56 中出现错误 错误 TS2314 通用类型 Module
  • Java:有符号长字符串到无符号长字符串

    有没有一种简单快速的方法将 Java 有符号长字符串转换为无符号长字符串 1 gt 18446744073709551615 9223372036854775808 gt 09223372036854775808 9223372036854
  • 在 OpenGL 3.2 中绘制全屏四边形的最佳方法是什么?

    我正在片段着色器中进行光线投射 我可以想出几种方法来为此目的绘制全屏四边形 要么在剪辑空间中绘制一个四边形 并将投影矩阵设置为单位矩阵 要么使用几何着色器将点变成三角形带 前者使用立即模式 在 OpenGL 3 2 中已弃用 我使用后者是出
  • 如何在 Xamarin.Forms 上使用 Android AutoCompleteTextView

    我正在研究一个Xamarin forms项目但我需要使用Android Widget AutoCompleteTextView我该如何应用它 当我尝试添加时AutoCompleteTextView UserNameAutoComplete
  • 如何创建和实现像素跟踪代码

    好吧 这是我一直在寻找的目标 众所周知 大多数广告和分析公司使用所谓的 像素 代码来跟踪网站浏览 交易 转化等 我确实知道它是如何工作的 问题是如何实现它 跟踪代码由几个部分组成 跟踪代码本身 这是用户在其网页上插入的代码部分 该代码的主要
  • 在 AsyncTask 中使用等待

    当使用wait in an AsyncTask I get ERROR AndroidRuntime 24230 Caused by java lang IllegalMonitorStateException object not loc
  • Intellij 无法理解 SQL 字符串

    大家 我正在制作一个玩具网络应用程序 它使用 Spring Boot 和 Mybatis Mybatis映射器配置Java接口 我希望 Intellij 能够理解 SQL 字符串 但事实并非如此 我期待像下面这样的 如果它理解 Intell
  • curl_getinfo($ch, CURLINFO_CERTINFO) 为空

    我有 PHP 7 2IUS https ius io GettingStarted 存储库 但默认 PHP CentOS 7 x 上的行为相同 Code domain google com ch curl init curl setopt
  • 404 页面适用于本地主机,但不适用于生产(Azure Web App)

    我的本地主机上有一个 404 页面 运行得很好 但是 当它被推送到 Azure Web App 时 却没有 我最初是通过发布工具推送它的 现在我使用从 Github 分支推送的内置功能 我有以下内容网络配置
  • “Line2D”对象没有属性“kind”

    我刚刚开始学习 pandas 当时我想制作 2013 年车站平均值的条形图 以创建一个fig ax plt subplots 对象并将绘图添加到创建的 ax 我在运行这部分代码时收到此错误 Line2D 对象没有属性 kind fig ax
  • 无法在 Tkinter 中禁用自动换行

    我正在尝试在禁用自动换行和水平滚动条的文本窗口中写入 如下所示 root Toplevel root geometry dx d 0 0 350 400 af Frame root chtext Text af width 45 wrap
  • 2.5升级后无法编辑Streamfield页面

    我在本地开发中有一个使用 Streamfield 和 2 个自定义 StructBlock 字段的站点 在 2 4 中工作正常 但升级到 2 5 后 我可以在管理中正常创建页面 但当我保存后在管理中编辑该页面时 会出现错误 我也尝试使用新的
  • 如何将div转换为图像?

    我有一个 div 我需要制作这个 div 的图像并发送给服务器 有什么方法可以使用 Angular 7 来做到这一点吗 我尝试搜索库但没有结果 所有解决方法都使用原生 JS 要将 HTML 内容保存到图像中 您需要使用HTML2CANVAS
  • 在 rabin-karp 滚动哈希中选择基数和模素数

    哈希函数的解释为维基百科 http en wikipedia org wiki Rolling hash 它说 a 和 n 的选择对于获得良好的散列至关重要 并引用了一篇感觉不相关的线性同余生成器文章 我无法弄清楚这些值是如何选择的 有什么
  • driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS) 不起作用

    driver manage timeouts implicitlyWait 10 TimeUnit SECONDS 上面的隐式等待代码在 Google Chrome 上对我不起作用 我尝试过使用 selenium 2 47 和 2 53 1
  • 如何在 conda 环境中启动 exe

    我在 Windows 10 中使用 vscode 作为代码编辑器 并希望找到一种简单的方法来使用正确的 conda env 启动它以进行调试 目前 我必须打开命令提示符 然后激活 conda env 然后将 vscode 的快捷方式粘贴到提
  • 直接渲染CGImage(而不是UIImage)?

    我正在做一个CGImage func otf gt CGImage 这是渐变上的贝塞尔蒙版 所以 the path let p UIBezierPath p moveTo etc the mask let m CAShapeLayer se