从 Swift 中的小图像生成纹理 UIImage
Generate texture UIImage from small image in Swift
我想创建一个全尺寸纹理图像,比方说从现有 UIImage
尺寸 40 x 40 的 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!)
}
我想创建一个全尺寸纹理图像,比方说从现有 UIImage
尺寸 40 x 40 的 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!)
}