首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何告诉CIKernel在没有alpha通道的情况下生成输出图像?

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

Stack Overflow用户
提问于 2017-10-19 16:12:56
回答 1查看 558关注 0票数 0

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

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

(这是一个简单的非op内核来说明,而不是实际的内核。)

输入是BGRA,但我希望输出CIImage为BGR (或RGB或任何其他顺序)。这个是可能的吗?

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

如果重要的话,我的目标是iOS 11及以上。

我尝试将代码更改为:

代码语言:javascript
复制
kernel vec3 process(sampler src) {
  vec3 pixel = sample(src, samplerTransform(destCoord())).xyz;
  return pixel;
}

但我有个错误:

代码语言:javascript
复制
invalid kernel return type; valid types are 'vec2' and 'vec4' 

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

EN

回答 1

Stack Overflow用户

发布于 2017-10-19 18:38:45

根据Apple文档,返回类型必须是vec 4,但它不必是BGRA像素,甚至是像素:

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

来自:书写核

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46834395

复制
相关文章

相似问题

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