问题标签 [porter-duff]
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.
android - PorterDuff.Mode 等效于边缘衰落
我想以编程方式渲染TextView
. 通过哪种模式可以创建真正的 alpha 渐变?
真正的边缘褪色应该平滑地降低透明度(无叠加渐变黑客),1.0
以便0.0
顶视图淡入背景视图。
我尝试了所有组合,但没有一个有效?这样做是不可能的吗?
qt - 在 Qt 中绘制半透明颜色时避免颜色量化
我想使用 Qt 5.2 创建带有 alpha 的图像,但我发现颜色值正在被量化。这是一个例子:
这打印出来:
在我的应用程序中,保留原始的红色、绿色和蓝色值很重要。是否有我错过的 Qt 选项,或者这只是 Qt 2D 渲染器的预期行为?
android - 如何使用波特达夫组合物
这里我的要求是:我有一个位图并且想将位图切割成一些不同的形状,然后将这些不同形状的位图打乱,并要求最终用户按顺序排列它们,如果发生这种情况会显示成功消息。
现在我的问题是:
- 如何切断不同形状的位图?
- 我尝试了波特达夫成分但无法处理?
对最终用户来说就像一个益智游戏,他需要拖放和旋转位图。
任何想法请帮助我。请同时查看此链接。
android - Android 使用 PorterDuff 组合图像
所以我基本上不了解 PorterDuff 及其各种模式。我有两张我想组合的图像,一张是航拍图像,另一张是要覆盖在航拍上的 alpha 蒙版,因此只有某些部分可以显示出来。我目前有一个系统,我可以在其中正确地将蒙版叠加到只有它通过的其他图像上,但问题是在这种情况下我必须有背景颜色并且我需要它是透明的。(类似于这里的问题Efficient Bitmap masking with black and white alpha mask in Android)
我觉得我已经尝试了 ColorFilter、XferMode 的每一种组合,甚至以相反的顺序绘制图像,但似乎没有任何效果。我觉得我完全误解了 PorterDuff 模式的工作原理(基于我的很多信息http://ssp.impulsetrain.com/porterduff.html)。
如果有人对如何实现这一点有任何见解,我应该使用什么 PorterDuff 模式,我应该使用 ColorFilter 还是 XferMode,任何事情我都会非常感激。
提前致谢
android - 3D图像遮罩android
我正在开发一个关于 3D 图像遮罩的应用程序。为此,我有不同的透明图像并将它们放在一个数组中。我搜索了很多,最后我使用 PorterDuffXfermode 来实现遮罩。但我一次只能得到一个遮罩图像.请看下面的代码
我想要的输出如下图所示。在此先感谢
android - 用水平线写位图
我正在尝试在透明位图上进行手指绘制。我使用的画布可以很好地绘制图像,但是当我保存图像时,图像如下所示,所有水平透明线。
我使用以下代码进行绘制。
该文件使用保存
我使用标准文件保存来保存它
有什么办法可以解决这个问题?同时,我将位图嵌入到 pdf 中,并且颜色比应有的颜色深。
这是我保存之前图像在屏幕上的样子。背景无关紧要,我可以很好地绘制到屏幕上,但是当它保存为 png 时,它看起来很乱。
javascript - HTML5 画布合成算法与 Porter-Duff 模型不一致
我正在尝试将 alpha 与 HTML5 画布混合使用。虽然颜色看起来大致不错,但检查实际像素值context.getImageData()
显示与标准 Porter-Duff 模型的差异似乎太大而无法用 8 位算术的限制来解释。
这是摘要:
阅读空白画布 =>
R=G=B=A=0
。这有点奇怪。由于我未上漆的画布显示为纯白色,我会预料到R=G=B=255
的。当然,有了A=0
,R、G 和 B 无论如何都无关紧要。尽管如此,我不确定如何R=G=B=A=0
显示为纯白色。用 涂上它
R=200,G=B=0,A=0.75
。将结果读取为R=201,G=B=0,A=0.75
。A=0.75
似乎是正确的;波特-达夫想要A_final=.75+(.25*0)=.75
。G=B=0
也很好。但我相信 R 应该是R=(.75*200)+(0*(.75-1)*0)=150
. 显然150 != 201
。相反,他们似乎使用了Final_color=new_color
R、G 和 B的方程式。用 重新画一遍
R=100,G=200,B=0,A=0.2
。将结果读取为R=175,G=50,B=0,A=0.8
。同样,A 的计算似乎是正确的;.2+(1-.2)*.75=.8
. 然而,波特-达夫预测R=(.2*100)+(.75*(1-.2)*201)=(.2*100)+(.6*201)=141
。再一次,很明显141 != 175
。绿色同样不一致。然而,R 和 G 都可以用公式来解释Final_color=.25*new_color+.75*old_color
——不幸的是,这不是 Porter-Duff 混合所预测的。
其他一些注意事项:
- 为简单起见,我将上面的所有 alpha 值都显示在 [0,1] 范围内。当然,getImageData 实际上在 [0,255] 中返回它们。
我已经检查了规范,就画布应该做什么而言,它似乎同意我的看法。
我已经尝试过 Chrome V37 和 IE V11,结果基本相同。
用绘画
A=0
作品很好,用绘画也一样A=1
。我发现一篇2011 年的帖子抱怨类似问题,但认为这是浏览器错误。我很难相信这样一个明显的错误会在三年后仍然存在——在两个不同的浏览器中以相同的方式出现。
以下是我如何阅读的代码详细信息:
和写作:
android - 在一条路径上绘制重叠区域
我有一个Path
越过自己的区域,我想更改不止一次越过的区域的颜色。如下所示:
所以我设置了我的油漆。
但是当我打电话时canvas.drawPath(mPath1, highlighterPaint)
,canvas.drawPath(mPath2, highlighterPaint)
我得到了下图。这张图片中有两条路径,它们的端点都被标记了。
我正在将每条路径绘制到Canvas
.
单独Path
的 s 正确地使它们的共享区域变暗,但单个Path
没有。我怎样才能达到类似于第一张图像的效果?
java - 实现 PorterDuff 模式 - 如何处理 alpha
我处于需要在 Android 中使用位图混合的情况。并使其类似于iOS版本的应用程序。
iOS 开发人员使用了 PorterDuff 模式,目前 Android 的PorterDuff 开箱即用类中没有这种模式。
正是我需要柔光模式,但忘了这一点 - 我决定处理 Android 缺少的某些模式的整体想法。
以下是我在研究期间发现的链接:
它们都包含所需的公式,因此编写一个方法并实现我可能需要的每种混合模式似乎很容易。
然而,这就是麻烦开始的地方。
上面链接中的公式仅处理颜色分量,将 alpha 放在一边,就好像它是理所当然的一样。但事实并非如此。
到目前为止,我最终得到了这个SO question的代码。我正在考虑重写overlay_byte(int sc, int dc, int sa, int da)
方法来实现柔光公式,但不知道如何处理sa
和da
变量。
PS:我知道混合模式的裸java实现的性能将与原生android的PorterDuff类相去甚远,但这可以稍后处理......
稍后添加:
从昨天开始,我做了一些更深入的研究,并找到了一种在 java 上实现柔光混合模式的方法。这是源代码(当我们使用像 PorterDuff.Mode.LIGHTEN 这样的开箱即用模式时,它在 android 中也可以使用)。
我softlight_byte
从那里获取方法以及他使用的所有方法并将其翻译成 java(我在这里尽了最大努力)。结果有效,但给出的图像不正确:底部看起来还可以,但顶部重新烧毁。这是我的代码,重写为java:
有人可以检查可能的错误吗?这对我来说真的很重要!
PS:applyBlendMode
取自我上面提到的SO问题,并softlight_byte(rD, rS, aS, aD);
实现-从C++重写。
android - drawBitmap to canvas with a transparent bitmap, replace original pixels
My app lets the user edit an image. The image is edited in "slices": The user selects a portion of the big image to edit (1), the user edits it (2, 3), and then when the user finishes, the edited slice is copied back over the original image (4). You can see the simplified procedure in the following image.
To edit the slice, I create a bitmap of the cropped region, which is the one the user edits (2,3).
When the user finishes, I just
drawBitmap()
the slice into the original image (4). The process is more complex because the original image has a transformation matrix, that I have to invert, etc, but for the sake of simplicity this is enough.
The problem arises when the user clears some pixels in the slice (3). I can't find a proper PorterDuff / Paint
mode so the edited slice replaces the portion on the original image, even with transparent pixels. What I want is to get the result depicted at (4)
My best bet so far is to use PorterDuff.SRC
, but as you see in the image below, the transparent pixels turn Black in the original image. If I set the paint's color to Transparent, the whole result is black.
I also tried SRC_OVER
and even mImageCanvas.drawARGB (0xff,0,0,0),
but no luck. In the first case, the transparent pixels are just ignored. In the second, the transparent pixels are painted black.