首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用CoreImage生成条纹-没有锋利的边

用CoreImage生成条纹-没有锋利的边
EN

Stack Overflow用户
提问于 2018-06-28 06:17:44
回答 2查看 243关注 0票数 7

Im用CoreImage框架用条形线生成图像,输出似乎有不正确的边缘,如下图所示。我使用的代码如下所示。

代码语言:javascript
运行
复制
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)

我需要的是下面

EN

回答 2

Stack Overflow用户

发布于 2018-07-11 17:39:40

将弧度(而不是度)值.pi / -4给rotationAngle: of CGAffineTransform。

代码语言:javascript
运行
复制
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 )
            )!
        )
    }
}

结果:

票数 6
EN

Stack Overflow用户

发布于 2018-06-28 06:32:24

您可以尝试这样的方法,但是我还没有正确地测试它:

代码语言:javascript
运行
复制
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))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51075897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档