【问题标题】:iOS: Draw image multiple times in contextiOS:在上下文中多次绘制图像
【发布时间】:2014-08-20 09:23:03
【问题描述】:

我有一些图像,我希望在我的 UIControl 中绘制它。但是为了提高性能,我需要在图形上下文中进行绘制。

现在我可以使用类似的东西了:

var imageRect1 = CGRectMake(0, 0, width, height)
var imageRect2 = CGRectMake(x2, y2, width, height)
...
CGContextDrawImage(ctx, imageRect1, image)
CGContextDrawImage(ctx, imageRect2, image)
...

但是这个解决方案意味着我们至少在每次调用该上下文函数时读取image。 我搜索了一些适用于某些步骤的解决方案,例如下一个(如果我错了,请随时纠正我):

//read image into some bitmap or maybe some byte array
//paste it several times in different places (several times means ~500 times)

也许我必须逐像素复制?谁能给我一些建议如何快速做到这一点?

【问题讨论】:

  • 你想归档什么?如果您想绘制图案/平铺图像,有更好的方法使用[UIColor colorWithPatternImage:]CGContextDrawTiledImage。如果您需要直接控制每张图片的显示位置,您可以使用CGLayer
  • 想象一下我有一些东西like that 我需要插入 500 次图像。所以我试图找到一些不读取图像 500 次的方法。也许读取我的图像位图数组中的第一个像素并将其分配在结果位图数组中的 500 位置?我不知道我应该使用哪种方式来获得一些有价值的性能,我应该怎么做..
  • 您也可以使用drawInRectdrawAtPoint 方法,然后从当前上下文中获取图像。
  • @VitaliyLevytskyy:出于好奇,您最终是如何解决这个问题的?

标签: ios graphics core-graphics


【解决方案1】:

如果您要在 CALayer 中绘制单个图像,最好的解决方案是将图像设置为支持 CALayer 的内容属性,如 @ 中所述987654321@.

self.imageLayer.contents = (id)image.CGImage

否则您担心使用CGImageRefCGContextRef 进行缓存,您的问题已在此处得到解答:

UIImage -> CGImageRef

else if你直接在UIView中绘图,见@boeqqsh评论:

let image = UIImage.imageNamed("image")
let imageRect1 = CGRectMake(0, 0, width, height)
let imageRect2 = CGRectMake(x2, y2, width, height)

image.drawInRect(imageRect1)
image.drawInRect(imageRect2)

【讨论】:

    猜你喜欢
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2014-05-13
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多