objective-c - 在 Swift 中从小图像生成纹理 UIImage

标签 objective-c swift uiimageview uiimage textures

我想从现有的大小为 40 x 40 的 UIImage 创建一个全尺寸纹理图像,比方说 1000 x 1000。

我用来创建图像的代码是

let textureImg = UIImage(CGImage: CGImageCreateWithImageInRect(textureImage?.CGImage, CGRect(origin: CGPointZero, size: CGSizeMake(1000, 1000)))!)

其中 textureImage 是一些 40x40 的图像。

请让我知道实现此目的的任何正确方法,因为上面的代码没有给出正确的结果。整个图像变白。

最佳答案

以下是如何使用 CIAffineTile 将 40x40 的图像平铺成 500x500 的图像。请注意,我正在做一些不必要的强制展开等,因为我从现有代码中提取了它。这是经过测试的。

let inputImage = UIImage(named: "vermont.jpg")
let tiledImage = createTiledImage(inputImage:inputImage!)
print(inputImage!.size)  // displays (40.0, 40.0)
print(tiledImage.size)   // displays (500.0,500.0)
imageView.image = tiledImage

func createTiledImage(inputImage:UIImage) -> UIImage {
    let filter = CIFilter(name: "CIAffineTile")
    filter!.setValue(CIImage(image: inputImage), forKey: "inputImage")
    let outputImage = filter?.outputImage?.applyingFilter("CIAffineTile", withInputParameters: nil).cropping(to: CGRect(x: 0, y: 0, width: 500, height: 500))
    let ciCtx = CIContext(options: nil)
    let cgimg = ciCtx.createCGImage(outputImage!, from: (outputImage?.extent)!)
    return UIImage(cgImage: cgimg!)
}

关于objective-c - 在 Swift 中从小图像生成纹理 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42250657/

相关文章:

iphone - 子类化实现 MKMapViewDelegate 的类,但未调用 MKMapViewDelegate 方法

ios - 当用户滚动到最后一个 tableViewCell 时执行操作

ios - libc++abi.dylib : terminating with uncaught exception of type NSException (lldb) : Drop Down Menu

swift - 无法将类型 'String' 的值转换为预期的参数类型 'NSNumber'

带有嵌套图像的 UiScrollview 看起来很奇怪

objective-c - NSURLConnection 发送异步请求 :queue:completionHandler: making multiple requests in a row?

objective-c - 协议(protocol)委托(delegate)未被调用

objective-c - 何时使用 Bound 何时使用 Frame

ios - 可调整大小的 UIImage,其中外部拉伸(stretch)和内部保持不变

ios - 更改 UIImageView 中的图像,其他 XCode 问题