简体   繁体   English

无法从 UIGraphics 生成 cgImage

[英]Unable to generate cgImage from UIGraphics

I am developing a game which needs to render tiled pipe form the previously loaded cgImage.我正在开发一个游戏,它需要从先前加载的 cgImage 中渲染平铺的 pipe。 For this purpose I am using the following code, however the resized image is not rendered Can someone give me an advice how to fix that?为此,我正在使用以下代码,但是未呈现调整大小的图像有人可以给我一个建议如何解决这个问题吗?

EDIT: to include minimal code for reproduction `编辑:包含最少的复制代码`

      import SwiftUI

struct ContentView: View {

@State var reImage : UIImage?

var body: some View {
    VStack {
      
        Image("pipe-green")
            .resizable()
            .scaledToFit()
        Image(uiImage: reImage!)
            .resizable()
            .scaledToFit()
        
        
        Button("Resize") {
            let sizeNew = CGSize(width: 100, height: 300)
            reImage = resizeImage(textures: (pipe: "pipe-green", cap: "bottom-green"), of: sizeNew)
        }

    }
}

func resizeImage(textures: (pipe: String, cap: String), of size: CGSize) -> UIImage? {
    

         guard let texture = UIImage(named: textures.pipe)?.cgImage else {
             return nil
         }
         let textureRect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
 
         // Render tiled pipe form the previously loaded cgImage
         UIGraphicsBeginImageContext(size)
         let context = UIGraphicsGetCurrentContext()
         context?.draw(texture, in: textureRect, byTiling: true)
         let tiledBackground = UIGraphicsGetImageFromCurrentImageContext()
         UIGraphicsEndImageContext()
 

    
   return tiledBackground
}

} }

extension UIImage {
    func resized (to size : CGSize) -> UIImage {
        return UIGraphicsImageRenderer(size: size).image { _ in
            draw(in: CGRect(origin: .zero, size: size))
        }
    }
}

Actually solved it by adding that extension.实际上通过添加该扩展来解决它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM