我想使用“9 切片”缩放来拉伸(stretch)图像,其中仅缩放图像的中心。完全像 UIImage 的 stretchableImageWithLeftCapWidth
方法,但是我想在后台线程中执行此操作。我明白这个方法只能在gui线程中使用。
我正在 iOS/iPad/iPhone 上开发。
有没有人有代码片段,或者知道可以执行此操作的库?我不想重新发明轮子!
一些我发现有用的相关引用资料:
CGContext 文档:
关于在后台绘制的不错的博客条目:
使用 CGContext 旋转图像:
最佳答案
从 iOS 4 开始,UIKit 的某些部分是线程安全的;我相信 UIGraphics 函数和 UIImage 绘图应该可以工作。
如果你需要支持 iOS 3,那就有点困难了。如果你想完全避免 UIKit(可能是明智的),那么你需要将 CGImageRef 传递给后台线程。您可能还需要担心其他事情;我假设 scale
为 1,imageOrientation
为纵向。
- 创建上下文:
CGBitmapContextCreate()
- 创建您的子图像:
CGImageCreateWithImageInRect()
。 - 将每个子图像绘制到正确的位置:
CGContextDrawImage()
- 从上下文中获取图像:
CGBitmapContextCreateImage()
- 释放必要的东西并将 CGImageRef 返回给主线程。
- 在主线程中,使用
+[UIImage imageWithCGImage:]
或+imageWithCGImage:scale:orientation:
(请注意,在后一种情况下,只有比例为 2 的图像似乎支持纵向;我不确定为什么)。
另请注意,将图像粘贴在 UIImageView 中并适当设置 contentStretch 会好得多,因为这样缩放是在 GPU 上完成的。
关于iphone - 在 iOS 上使用 Cocoa 在后台进行 9 切片缩放/拉伸(stretch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6386451/