【问题标题】:Generating stripe lines using CoreImage - No sharp edges使用 CoreImage 生成条纹线 - 没有锋利的边缘
【发布时间】:2018-07-12 01:39:40
【问题描述】:

我正在使用 CoreImage 框架生成带状线的图像,并且输出似乎有不正确的边缘,如下图所示。我使用的代码如下。

fileprivate func generateImage(_ width: CGFloat, _ height: CGFloat, withColor1: CIColor, withColor2: CIColor) -> CGImage? {

   let context = CIContext()

   if #available(iOS 10.0, *) {
   let stripes = CIFilter(name: "CIStripesGenerator", withInputParameters: [
                "inputColor0" : withColor2,
                "inputColor1" : withColor1,
                "inputWidth" : NSNumber(value: 10),
                "inputSharpness" : NSNumber(value: 0.7)

                ])!.outputImage!

    let rotate = CIFilter(name: "CIAffineTransform", withInputParameters: [ "inputImage" : stripes,"inputTransform" : NSValue(cgAffineTransform: CGAffineTransform(rotationAngle: -75.0))])!.outputImage!

    return context.createCGImage(rotate, from: CGRect(x: 0, y: 0, width: width, height: 50.0))!

        } else {
            // Fallback on earlier versions
        }

        return nil

    }

高锐度

低锐度(0.7)

下面是我需要的

【问题讨论】:

    标签: ios swift core-image


    【解决方案1】:

    将弧度值,而不是度数,.pi / -4 赋予 CGAffineTransform 的 rotationAngle:。

    import UIKit
    import CoreImage
    
    fileprivate func
    generateImage(_ width: CGFloat, _ height: CGFloat, withColor1: CIColor, withColor2: CIColor) -> CGImage? {
    
        let context = CIContext()
    
        let stripes = CIFilter(
            name: "CIStripesGenerator"
        ,   parameters: [
                "inputColor0"   : withColor2
            ,   "inputColor1"   : withColor1
            ,   "inputWidth"    : NSNumber( value: 10 )
            ,   "inputSharpness": NSNumber( value: 1 )
            ]
        )!.outputImage!
    
        let rotate = CIFilter(
            name: "CIAffineTransform"
        ,   parameters: [
                "inputImage"    : stripes
            ,   "inputTransform": NSValue( cgAffineTransform: CGAffineTransform( rotationAngle: .pi / -4 ) )
            ]
        )!.outputImage!
    
        return context.createCGImage( rotate, from: CGRect( x: 0, y: 0, width: width, height: height ) )!
    }
    
    
    class ViewController: UIViewController {
        @IBOutlet   weak    var oIV:    UIImageView!
        override func viewDidLoad() {
            super.viewDidLoad()
            oIV.image = UIImage(
                cgImage: generateImage(
                    oIV.bounds.width
                ,   oIV.bounds.height
                ,   withColor1: CIColor( red:0, green:0, blue:0, alpha:1 )
                ,   withColor2: CIColor( red:1, green:1, blue:1, alpha:1 )
                )!
            )
        }
    }
    

    结果:

    【讨论】:

      【解决方案2】:

      你可以尝试这样的事情,但是我没有正确测试它:

      let generatedImage = generateImage(...)
      
      let scaleX = yourView.frame.size.width / generatedImage.extent.size.width
      let scaleY = yourView.frame.size.height / generatedImage.extent.size.height
      
      let transformedImage = generatedImage.transformed(by: CGAffineTransform(scaleX: scaleX, y: scaleY))
      

      【讨论】:

      • 我会检查的。我需要在这里使用的锐度级别呢?
      • 不适合我。该图像旨在显示为 swift 图表数据集中的填充。
      猜你喜欢
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 2021-02-05
      • 2021-08-19
      相关资源
      最近更新 更多