2017-02-15 209 views
0

从小图像生成纹理的UIImage我想创建一个全尺寸的纹理图像可以说,1000×1000,从现有大小的UIImage 40×40斯威夫特

我用来创建图像的代码是

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

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

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

+0

按质地,你的意思是“平铺”?如果是这样,请查看CIAffineTile(https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIAffineTile)。如果你需要一些代码,请告诉我。 – dfd

+0

'let textureImg = UIImage(color:UIColor(patternImage:textureImage!),size:CGSizeMake(300,300))!'很好地生成与'CIAffineTile'相同的平铺图像。但是,我没有能够正确地实施CIAffineTile,举例会很有帮助。 –

回答

0

下面介绍如何使用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!) 
}