问题标签 [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 投票
1 回答
678 浏览

c - Pixman 合成与 Alpha 混合

下面是一个小测试程序(在小端机器上工作)。

事实上,结果对我来说已经很奇怪了:

正如我所期望的填充颜色 #FFFFFFFF x 掩码 0x80 = #FFFFFF80 和 #9090FFFF 的输出......

现在,如果我通过更改“cfill.alpha = uint16_t(0x80) << 8;”将填充颜色设置为#FFFFFF80 ,结果似乎真的错了:

我希望填充 x 掩码 => #FFFFFF40,因此输出:#606060C0FF。

我特别不明白较低的 alpha 输入颜色如何最终在目标图像上以较亮的输出结束。

我在这里做错了什么?是否有另一个 PIXMAP_OP_xxx 可以按我的预期工作?

谢谢。

0 投票
1 回答
1384 浏览

opengl - OpenGL 窗口管理器 - 多进程合成

我想设计一个简单的窗口管理器,能够合成来自多个进程的输出。我的第一个想法是只对独立应用程序使用不同的线程,所以我只使用一个上下文并在应用程序和管理器主线程之间共享它,但再想想这听起来不是一个好主意,因为任何线程崩溃将终止一切。

所以我决定它必须真正支持应用程序的专用进程,但这让我想到了一个问题,即我如何以高性能的方式将来自不同进程的输出准确地拼接在一起。将数据从 GPU 复制到 CPU 以共享系统内存根本不是一种选择。从 OpenGL 并行常见问题解答中可以清楚地看出,不可能使用来自多个进程的一个上下文,除非它是间接导致性能非常低的。

那么,现有的窗口管理器是如何做到的呢?当然,我不希望有任何低层次的细节,只是一般的概念概述。

0 投票
2 回答
1085 浏览

ios - Overlapping transparent UIViews

I’m overlaying two UIViews with a white backgroundColor at 25% opacity. In a small part, they overlap each other, meaning that at that area, they are summed to 50% opacity.

I’d like to keep that 25% opacity, even if the two views overlap, effectively meaning that in those overlapped points, each view’s opacity drops to 12.5% to total 25%.

I’ve done a little looking into compositing but I’m not sure which of these modes would help, or how I’d go about applying them to a specific part of these two UIView instances.

(http://docs.oracle.com/javase/tutorial/2d/advanced/compositing.html is what I was reading, and I found the CGBlendMode for drawing, if it comes to using that (though I’d prefer not to if possible!))

0 投票
0 回答
202 浏览

opengl-es - 使用 OpenGL ES 2.0 合成透明多边形

我有一个 2D 对象需要使用 OpenGL ES 2.0 以半透明的形式呈现到屏幕上。但是,对象是由几个重叠的多边形组成的。当我使用混合功能时

结果是多边形重叠的对象部分明显不那么透明(这是有道理的)例如,如果我正在渲染一个由两个略微重叠的圆组成的对象,alpha = .5,对象的区域圆圈重叠只会是 25% 透明,而非重叠区域将是 50% 透明。但是,我的目标是用统一的颜色和透明度渲染对象。

我知道我可以将对象渲染为不透明的中间纹理,然后将具有正确透明度的纹理渲染到屏幕上。然而,这个特定的绘图调用经常发生在不同的对象上(所以我不能缓存结果),中间步骤会严重影响性能。这可以在没有使用 OpenGL ES 2.0 的中间步骤的情况下完成吗?

0 投票
1 回答
353 浏览

javascript - 合成:如何根据单选按钮中的选定选项动态更改画布新图纸?

几个月前我有一个关于通过合成(HTML5 Canvas)为画布着色的相关问题。当我再次遇到它时,我确实以某种方式理解它现在是如何工作的。但我今天的问题是,是否可以通过单选按钮更改绘制像素的分层而不影响已选择颜色的其他图层?

为了掌握我在说什么,我创建了一个有效的JSFIDDLE。(对不起凌乱的CSS)

解释小提琴:我目前拥有的是我可以更改示例图像的背景颜色和中心的花朵。现在,如果您单击灰色按钮“更改中心图像”,将出现一个模式,显示 2 个示例中心图像,花朵和爪子。我想要实现的是根据模态框上的选中项来改变之前绘制的画布(也就是花)。假设我单击爪子图像,我应该能够看到爪子而不是花。背景的选定颜色不得受到影响。

这可能吗?如果没有,还有其他方法吗?

所以这是我的 JavaScript:

还有我的 HTML:

我实际上最初是在考虑获取单选按钮的值并通过单击功能将其加载到我的图像数组中,但我认为这是不可能的。

所以我想在我的 JS 中使用这样的东西(假设图像来自我的服务器,所以我使用图像的直接名称):

并将其传递给我的图像数组:

但是当我单击单选按钮时,我无法动态地让它改变。

我将非常感谢任何建议、建议或答案。谢谢你。

0 投票
1 回答
2365 浏览

node.js - 如何在一个流中合成多个图像

我正在尝试将多个图像合成到一个流中,该流将作为响应进行管道传输。我在https://github.com/aheckmann/gm使用 Node.js 和 GraphicsMagick for Node 。

如果我将两个图像合成到一个流中,它可以正常工作,对于这个例子,它显示了预期的最终合成的二/三。这是我的代码:

这在邮递员中效果很好 祝你有美好的一天

但是当我尝试合成三张图像时,它并没有按预期正确地填充图片的底部。代码是这样的:

我无法弄清楚为什么输出是这样的: 不再有最好的一天

0 投票
1 回答
287 浏览

c++ - 柔软、透明的笔触纹理没有像我预期的那样混合

我正在尝试在我的 GL 4.5 应用程序中实现软笔刷。我已经实现了 100% 的硬刷,但软刷功能低于标准。我试图实现的这种绘画模式在 Krita 中称为“水洗”绘画,是 GIMP 中的正常模式。

例如:在 Photoshop 中,我有一个低硬度的圆形画笔,画笔不透明度为 10%,按住鼠标并拖动光标,我得到一个均匀的笔触,纹理的不透明度达到 10%,除了它的边缘淡出。如果我再次单击,由于添加剂混合(?),它会增加 10% 的白色。

在我使用软笔刷纹理的应用程序中,由于纹理的不透明度逐渐消失,我总是在鼠标移动时出现条带。在混合当前笔画和 BG 纹理后,我尝试了各种混合模式并限制不透明度,它们或多或少看起来如下所示:

http://i.imgur.com/bZWDhoF.jpg

pPaintStroke_washF 全屏四边形着色器

应用

0 投票
1 回答
231 浏览

android - 如何解决抽屉动画期间的显示撕裂问题

我正在使用允许底部和顶部边缘抽屉的第 3 方抽屉(https://gist.github.com/patrickfav/6284130 MultipleOrientationSlidingDrawer)。

当我为抽屉的打开设置动画时,我会得到显示撕裂,但仅在特定情况下。单击抽屉标题时,动画流畅美观。

我在主窗口中有一个 RecyclerView。如果用户单击列表视图中的条目,抽屉幻灯片将打开,显示所选条目的详细信息(单击轨道,从底部向上滑动媒体控件)。抽屉动画的一部分是在抽屉打开时将主窗口内容淡化为黑色。所以有大量的透支。奇怪的是,当通过单击 RecyclerView 触发动画时,我会在动画过程中撕裂显示(严重闪烁,发生在从屏幕顶部向下大约 2/3 处)。

我正在寻找有关如何进行的建议:如何调试,或者关于什么可能导致动画期间显示闪烁的理论。

这是我到目前为止所尝试的。

jumpDrawablesToCurrentState 在每个动画传递期间,这肯定应该取消可绘制动画。仍然没有喜悦。

我已经推迟了对点击本身的响应,直到抽屉打开动画完成,所以在动画发生时没有主要的背景或前景操作。也没有音频运行,没有服务活动可言。分析表明在动画运行时没有运行与绘图无关的代码。

由于一切都发生得相对较快,因此很难准确判断发生了什么,除了正在发生严重的闪烁。由于涉及动画,因此无法在动画中间中断调试器以查看发生了什么。一旦我中断调试器,下一次重绘将处于完全打开状态,因为动画位置来自当前设备 uptimeMillis()。

如果我分析动画,我会看到大量的文本布局操作,这表明回收器视图条目可能会在动画期间不断地执行布局。这真的没有意义。我没有理由想到布局会发生。可能只是文本调用与 onDraw 操作有关。但我提到这一点是因为我在分析中看到的似乎有点奇怪。动画期间的大部分 CPU 时间似乎都花在了执行文本测量操作上,大概是用于 RecyclerView 条目中的内容。

发生大量透支。抽屉本身有一个包含专辑插图的大位图,而且我可能已经堆叠了半透明的图层和背景。例如,RecyclerView 中各个条目上的 RippleDrawable 背景很可能会导致大部分屏幕完全过度绘制。此外,当抽屉动画到打开位置时,视图有一个完整的过度绘制通道,它会使背景内容变暗。话虽如此,当通过单击抽屉的标题触发动画时,抽屉的动画效果非常好。只是不是当启动动画的点击来自 RecyclerView 时。所以我不认为透支是真正的问题。

就其价值而言,显示翻录的位置似乎与选择和按下的位置无关。单击 RecyclerView 中的第一个或最后一个条目不会影响显示翻录发生的位置。ADB shell dumpsys SurfaceFlinger 表示正在三层(状态栏、导航栏和主要活动)上执行硬件组合。所以抽屉本身没有使用 SurfaceFlinger 组合(如果它发生至少指向导致显示器撕裂的大致方向)。但是,在动画运行时,我无法真正获得 SurfaceFlinger 状态。动画期间可能正在使用硬件合成。它确实看起来像显示翻录,我想不出如果 SurfaceFLinger 不是,为什么会发生翻录

我完全不知道问题可能是什么,或者尝试调试它的方法。任何关于一般调试方法的建议,或关于问题原因的建议都将不胜感激。

0 投票
1 回答
556 浏览

python - Nuke 访问错误的 Python 版本

我遇到了一个与此非常相似的问题: 使用多个版本的 Python

尽管我相信我的问题的背景不同,但足以保证一个单独的问题。我在尝试启动 The Foundry's Nuke 的非商业版本时收到此错误。错误的表现与此类似:

http://community.thefoundry.co.uk/discussion/topic.aspx?f=197&t=113695

,除了命令提示符立即关闭之前返回的错误信息是第一个链接中显示的错误信息。这让我相信 Nuke 正在尝试访问错误的 Python 版本(目前它正在尝试访问 Python 3.5)。

假设我的思路是正确的,我该如何更改 Nuke 尝试访问的 Python 版本?我应该提一下,Foundry 论坛链接中的任何建议都没有被证明是成功的。根据我所阅读的内容,Nuke 使用的最新版本的 Python 是 2.7。所以更具体地说,我怎样才能让 Nuke 访问 Python 2.7 而不是 Python 3.5?两者都安装在我的 64 位 Windows 10 桌面上。

提示关闭且 Nuke 无法启动时返回的语法错误

0 投票
1 回答
178 浏览

c# - 我有在 OpenTK/C# 中工作的图像合成(白色/阿尔法蒙版),除了每次通过都会缩放输出

这就是我一直试图解决的问题。鉴于:

  • a) 产品图片。预计全彩
  • b) 该图像的掩码:RGBA(0,0,0,0) 表示忽略,RGBA(255,255,255,255) 表示替换
  • c) 合成图像:这是与蒙版合成的

想法是将蒙版与合成图像合成,这将导致所有白色像素成为合成像素,但透明像素保持透明。这最终覆盖在产品图像的顶部,仅有效地转换了遮罩区域中的像素。

我有这个完美的工作,除了一个小问题。每次通过我的 Composite 函数似乎都会将输出缩小 0.5 倍。

我的解决方案中有一些代码,所以我会发布我认为必要的内容,但请随时提出更多要求。

这是我的复合方法:

这是 TexturedPolygon 类

这是 BasePolygon 类:

这是 BaseTexture 类

如果您需要更多代码,例如 OpenGLHelpers 内部的方法,我可以提供。请记住,通常我的绘图代码有效。我没有在这里设置任何投影,所以这就是我重置变换的原因。无论如何,平移和旋转现在都为零,因此实际上只是重置比例。我的基本绘图方法从 [0,1] 标准化,并且比例是将图像拉伸到所需的任何尺寸。

此外,这就是我所说的规模变得混乱的意思。那个红色的烧瓶形状应该是完全覆盖了烧瓶的内部,而且,烧瓶本身也被缩小了!所以它缩水了一倍...

复合失败

这显示了通过 4 次通过的迭代。笑脸是添加的另一个面具/复合组合

基础图片: 基本图像

面具 1: 面具 1

复合1: 复合 1

感谢任何帮助的人