• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - swift - 每像素绘图的 UIView 像素速度改进

[复制链接]
菜鸟教程小白 发表于 2022-12-13 02:26:33 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

有没有办法提高将每个像素的像素绘制到 UIView 中的速度/性能?

500x500 像素 UIView 的当前实现速度非常慢。

class CustomView: UIView {

public var context = UIGraphicsGetCurrentContext()

public var redvalues = [[CGFloat]](repeating: [CGFloat](repeating: 1.0, count: 500), count: 500)

public var start = 0
{
didSet{
    self.setNeedsDisplay()
}
}

override func draw(_ rect: CGRect
{
super.draw(rect)
context = UIGraphicsGetCurrentContext()
for yindex in 0...499{
    for xindex in 0...499 {
        context?.setStrokeColor(UIColor(red: redvalues[xindex][yindex], green: 0.0, blue: 0.0, alpha: 1.0).cgColor)

        context?.setLineWidth(2)
        context?.beginPath()
        context?.move(to: CGPoint(x: CGFloat(xindex), y: CGFloat(yindex)))
        context?.addLine(to: CGPoint(x: CGFloat(xindex)+1.0, y: CGFloat(yindex)))
        context?.strokePath()
    }
}
}
}

非常感谢



Best Answer-推荐答案


绘制单个像素时,可以使用 a bitmap context.位图上下文将原始像素数据作为输入。

上下文会复制您的原始像素数据,因此您不必使用可能会慢得多的路径。然后,您可以使用 context.makeImage() 获取 CGImage

然后可以在 ImageView 中使用图像,这样就无需每帧重新绘制整个图像。

如果不想手动创建位图上下文,可以使用

UIGraphicsBeginImageContext(size)
let context = UIGraphicsGetCurrentContext()
// draw everything into the context
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

然后你可以使用 UIImageView 来显示渲染的图像。

也可以画成CALayer,不需要每帧都重画,只需要调整大小即可。

关于ios - swift - 每像素绘图的 UIView 像素速度改进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45553376/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap