2017-02-15 402 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!) 
}