问题标签 [compositing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3195 浏览

swift - 核心图像过滤器 CISourceOverCompositing 未按预期显示与 alpha 叠加

CISourceOverCompositing用来在图像顶部覆盖文本,当文本图像不完全不透明时,我得到了意想不到的结果。深色不够暗,输出图像中的浅色太亮。

我在一个简单的 Xcode 项目中重新创建了这个问题。它使用 0.3 alpha 绘制的橙色、白色、黑色文本创建图像,并且看起来正确。我什至将该图像放入 Sketch 中,将其放在背景图像的顶部,它看起来很棒。屏幕底部的图像显示了它在 Sketch 中的外观。问题是,在使用 覆盖背景上的文本后CISourceOverCompositing,白色文本太不透明,好像 alpha 为 0.5,黑色文本几乎不可见,好像 alpha 为 0.1。顶部图像显示了以编程方式创建的图像。您可以拖动滑块来调整将重新创建结果图像的 alpha(默认为 0.3)。

在此处输入图像描述

代码当然包含在项目中,但也包含在这里。这将创建具有 0.3 alpha 的文本叠加层,它按预期显示。

接下来,该文本图像被覆盖在背景图像之上,这并没有按预期显示。

0 投票
1 回答
311 浏览

ios - 使用 CIAdditionCompositing 添加纯黑色时的预期行为?

我试图了解如何CIAdditionCompositing工作。

作为测试的一部分,我创建了一个正方形的中灰色图像:

和一个方形黑色图像:

当我使用CIAdditionCompositing补丁组合这两个正方形图像时,我希望看到一个灰色正方形,其颜色与原始的中间灰色正方形完全匹配(因为黑色图像的所有颜色分量的值都为 0)。然而,最终的结果实际上比原始灰度图像更亮:

我不明白这个结果是如何产生的。我对如何CIAdditionCompositing工作有什么误解?

0 投票
0 回答
250 浏览

swift - CIFilter 混合模式,在 Swift 中只产生明亮、饱和的颜色

我正在使用 CICategoryCompositeOperation CIFilter 类别尝试将效果应用于图像,该效果仅显示明亮、饱和的颜色,并删除其他所有内容,包括黑色和白色以及低于特定亮度的颜色。这也可能涉及其他过滤器。

然后需要将它放在另一个图像上,因此顶部生成的图像需要是透明的,它将所有东西都剪掉,或者使用黑色这样的背景颜色,在特定的混合模式下将这两个图像混合在一起。

0 投票
2 回答
623 浏览

performance - 为什么使用预乘 alpha 没有“显着更差的性能”?

QPainter负责Qt中的绘图和合成。文档中有一个部分讨论了性能。我的问题是关于下一段中的粗体句子。

Raster - 这个后端在纯软件中实现所有渲染,并且总是用于渲染到 QImages 中。为获得最佳性能,仅使用格式类型 QImage::Format_ARGB32_Premultiplied、QImage::Format_RGB32 或 QImage::Format_RGB16。任何其他格式,包括 QImage::Format_ARGB32,性能明显较差。该引擎默认用于 QWidget 和 QPixmap。

我知道将颜色通道乘以 alpha 是在源操作中完成的。这种乘法可以提前完成,以避免在合成器中进行。执行此乘法涉及将 RGB 通道乘以 alpha,然后除以 255(或乘以某个以正确方式溢出以模仿除法的幻数)。这是每像素六个整数乘法。当然执行额外的六个整数乘法不会有“明显更差的性能”?

阿尔法乘法真的那么慢吗?也许他们只是说他们不会像其他人那样尝试优化该代码路径,因此不能保证它的执行方式?

0 投票
1 回答
56 浏览

matlab - 在 Matlab 中移植 SVG 组合标准的问题

我已经在 Matlab 中移植了 SVG 组合标准(2009,https://www.w3.org/TR/2009/WD-SVGCompositing-20090430/)中的 24 种方法中的大部分,但有四种方法(如颜色减淡)继续比较 if 语句中的图像(例如:if Sca == Sa && Dca == 0 ...)但 Matlab 将其视为非标量运算符。

Sc、Dc 是 RGB 图像 Sa、Da 是表示 alpha 通道的灰度掩码 Dca、Sca 是预乘图像:Dca = Dc .* Da;Sca = Sc .* Sa;

如果 Sca == Sa && Dca == 0 时出现错误

|| 的操作数 和 && 运算符必须可转换为逻辑标量值

0 投票
0 回答
51 浏览

rust - 退出 gtk 应用程序没有合成效果

我想在一段时间后自动退出我的 gtk 应用程序。我该如何正确地做到这一点?我的问题是,当窗口关闭并且程序存在时,通过 compton 似乎没有窗口效果起作用,例如褪色。

这是我的代码:

connect_destroy_event甚至没有被调用,因为我没有收到打印消息。

0 投票
2 回答
359 浏览

python - Foundry Nuke – `elif` 和 `else` 语句的问题

所以为了简单起见,我在 NUKE 中编写了一个脚本,它将节点图中的选定节点对齐到 Y 轴上的一条直线上。我在编写elif语句时遇到问题,该语句要么没有按我想要的方式运行,要么给我一个语法错误。

所以函数的基础是:

ELSE STATEMENT- 当只选择一个节点时 - 弹出错误消息说用户必须选择多个节点

ELIF STATEMENT- 选择两个或多个在相同y轴的节点 - 消息显示它们已经对齐

IF STATEMENT- 当在不同的y轴中选择两个或多个节点时 - 它应正确对齐直线中的所有节点

0 投票
1 回答
17541 浏览

google-chrome - 强制无头铬/铬使用实际 gpu 而不是 Google SwiftShader

我正在尝试使用无头铬(使用 puppeteer)将 html 打印为 pdf并且一切正常,除非 html 包含大的 png 图像(超过 10.000x10.000px)渲染页面的整个过程需要非常长时间(最多半小时,但如果使用非无头模式只需要大约 10 秒)。经过几天的调查和调整,我得出结论,这一定是页面合成过程的问题。

以下是chrome://gpu无头和非无头模式下的页面转储。我注意到的唯一显着区别是,当无头运行 chrome 时,puppeteer 会自行附加--disable-gpu-compositing--allow-pre-commit-input我认为这会导致戏剧性的性能下降。

此外,在非无头模式下,chrome 会看到 2 个 gpu 单元:

在无头模式下只有一个:

这是 Vulkan 和 OpenGL ES 图形 API 的基于 CPU 的实现。

所以基本上我的问题是:

有没有办法使用实际 gpu(特别是用于 gpu 合成)与 puppeteer 一起运行无头 chrome/chromium,或者有没有办法在非无头模式下将页面打印到 pdf?

这是我的非无头 chrome gpu 配置(页面渲染速度很快):

这是无头 chrome gpu 配置(速度极慢)

即使我添加--disable-webgl并且--disable-webgl2仍在 VENDOR= 0xffff [Google Inc.], DEVICE=0xffff [Google SwiftShader] *ACTIVE*使用。

此外:

通过黑名单、about:flags 或命令行禁用了 Gpu 合成。浏览器将退回到软件合成,硬件加速将不可用。禁用功能:gpu_compositing WebGL 已通过黑名单或命令行禁用。禁用功能:webgl WebGL2 已通过黑名单或命令行禁用。禁用功能:webgl2

通知出现在chrome://gpu页面上

图形功能状态:

0 投票
1 回答
112 浏览

svg - 在 SVG 中应用目的地输出合成

我想将目的地输出合成应用到我的 SVG,以便一个形状可以“擦除”其他现有形状。根据我在SVG element的文档中<feComposition>阅读的内容,这应该可以工作,但不会产生预期的结果。我正在尝试使用该in="BackgroundImage"属性将我的过滤器应用于 SVG 文档中在使用过滤器之前出现的所有内容。

这是一个 jsBin,显示了此代码产生的内容。我希望第三个对角线<polyline>根本不可见;<polyline>相反,我希望它“擦除”它与前两个s相交的地方。

对我的目的而言,旧版浏览器支持并不重要;这只需要在最新版本的 Chrome 中工作。

0 投票
2 回答
289 浏览

c# - 在 Unity 中实现这种绘画式合成?

我已经通过合成在 Blender 中实现了这种绘画效果,但我需要知道它在 Unity 中是否可行——经过一些谷歌搜索并通过 Unity Asset Store,我什么也没看到。效果——

在此处输入图像描述 在此处输入图像描述

使用 Blender,这是通过置换和画布图案来实现的。我该如何做这个 Unity,特别是在 VR 中?

编辑:这是我根据下面的答案所拥有的,但没有实现图像效果:

在此处输入图像描述 在此处输入图像描述