代码之家  ›  专栏  ›  技术社区  ›  Kartick Vaddadi

我如何告诉CIKernel在没有alpha通道的情况下生成输出图像?

  •  0
  • Kartick Vaddadi  · 技术社区  · 7 年前

    我在Core Image中编写了一个自定义内核:

    outputImage = kernel.apply(extent: extent,
                               roiCallback: roiCallback,
                               arguments: [inputImage])!
    
    static let kernel = CIKernel(source:"""
    kernel vec4 process(sampler src) {
      vec4 pixel = sample(src, samplerTransform(destCoord()));
      return pixel;
    }   
    """)!
    

    (这是一个用于说明的简单无操作内核,不是实际内核。)

    我想这样做的原因是输入图像中的所有alpha值都是1,所以如果可以跳过它,我也不想浪费内存(和处理时间)在输出图像中存储数百万个1。我的代码对性能很敏感,运行速度不够快,所以我正在寻找优化它的方法。

    如果有必要,我的目标是iOS 11及以上版本。


    kernel vec3 process(sampler src) {
      vec3 pixel = sample(src, samplerTransform(destCoord())).xyz;
      return pixel;
    }
    

    但我有一个错误:

    invalid kernel return type; valid types are 'vec2' and 'vec4' 
    

    正如我在回答中指出的那样,vec3不是有效的返回类型,所以这个想法行不通。那是什么呢?

    1 回复  |  直到 7 年前
        1
  •  0
  •   l-l    7 年前

    为目标图像的每个像素调用一次内核例程。例程必须返回vec4数据类型。尽管该四元素向量通常包含像素数据,但不需要该向量来表示像素

    Writing Kernels