问题标签 [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 - Android PorterDuff.Mode.DST_IN 结合 Bitmap.Config.ALPHA_8
我正在玩位图蒙版,在尝试使用Paint绘制ALPHA_8
位图蒙版时偶尔会发现一个有趣的问题。PorterDuff.Mode.DST_IN
它只是不起作用,至少在 Android 6.x 和 5.x 上是这样。
这是我的示例可绘制代码:
当mMaskBitmap
有ARGB_8888
配置它工作得很好。但是当我使用ALPHA_8
它时不会。在这种情况下,图片根本没有被掩盖。
这是我在 Activity 中加载资源的方式:
请注意.extractAlpha()
哪个给了我ALPHA_8
位图。
以下是我使用 Drawable 的方法:
更有趣的是,当我尝试另一种方法时,先绘制蒙版,然后使用SRC_IN
Paint 绘制图片 - 它再次正常工作,即使使用ALPHA_8
蒙版:
...
这是我在GitHub 上试验的整个项目的链接。它包含非工作和工作解决方案,请随意使用。
任何人都知道为什么组合DST_IN
和ALPHA_8
不按预期工作?
ios - 在 Metal 中,经典 Porter-Duff“过度”合成的正确 blendFactors 是什么?
在 iOS 的 Metal 应用程序中,我需要渲染附加到简单四边形的半透明纹理。我无法弄清楚正确的 colorAttachment rgb 和 alpha 混合因子。
我的设置:
1) 在 Photoshop 中创建的红色图像,不透明度为 50%。保存为具有透明度的 PNG。该图像存储在我的项目资产文件夹中。
2)我首先创建一个金属纹理,UIImage
然后使用.cgImage
-CoreImage - 字段提取图像数据。该图像现在采用预乘格式,因此可以应用经典的 Porter-Duff 公式。稍后再谈。
3)这是我相当无聊的纹理片段着色器
4)这是我的 colorAttachment 混合因子设置,它是 Porter-Duff “over” 公式:
5)当我在白色背景上用这种红色半透明纹理渲染四边形时,图像太暗了。不正确的渲染(右图)是 rgb = (182, 127, 127)。来自 Photoshop 的正确图像是 rgb (255, 127, 127):
什么是正确的混合功能?
更新
如果人们想看看它在 Github 上的代码: https ://github.com/turner/HelloMetal/tree/2_pass_render
android - Canvas Android 中的重叠路径
我正在尝试绘制一个由许多路径组成的形状:-
像这样的多条灰线路径
和像这样的蓝线路径
pathColorList
是路径及其油漆颜色的列表。
问题是我需要始终在灰色路径之上的蓝色路径。即使 灰色路径重叠蓝色路径;重叠区域必须是蓝色而不是灰色,所以看起来蓝色带仍然在灰色带的顶部。
我尝试过的:-
一种方法是绘制所有灰色路径,然后绘制所有蓝色路径。但是我试图绘制的形状有多个灰色和蓝色重叠,需要按路径动画的顺序绘制,所以我不能这样做。
我尝试
PorterDuffXfermode
在灰色路径上使用,但 PorterDuffXfermode 似乎都不起作用for (对 pathColor : pathColorList) {
/li>
我无法弄清楚我做错了什么。任何帮助将不胜感激。
android - 合并两个 RGB 渐变
我有两个要合并的 LinearGradient:
- 一个水平从
rgb(0, 0, 0)
到rgb(0, 255, 0)
(黑色到绿色) - 一个垂直从
rgb(0, 0, 0)
到rgb(0, 0, 255)
(黑色到蓝色)
我的代码如下所示:
红色值可能会改变,但其他两个是不变的。我想在颜色选择器中使用生成的渐变。它必须看起来像这样:(您也可以在这里看到它,您必须单击颜色选择器右侧窗格中的 R 字母)
我尝试了几种 PorterDuff 模式,其中一些接近但没有一个符合我的需要。SCREEN
几乎是完美的,但有时它太轻了。ADD
将小于 128 的红色值显示为 0。MULTIPLY
用一种纯色填充正方形,仅此而已。我还尝试将渐变的颜色设置为 alpha 128。这会ADD
变得太暗,XOR
太SCREEN
苍白。
如何正确制作此渐变?我应该使用哪种 PorterDuff 模式?
我将光标绘制为与所选颜色相同的颜色,以测试渐变是否正确绘制。(选定的颜色是用坐标计算的)对于除值之外的所有枢轴值,光标很难看到/不可见。
看起来白色渐变变得透明得太快了。为了做到这一点,我露了两个线性梯度,然后将它们与ComposeShader
PorterDuffSRC_OVER
模式合并。然后我绘制一个黑色矩形,其透明度对应于值(亮度)值。如果您需要,我可以发布代码。
android - 使用画布清除特定圆圈外的区域
我有一个自定义视图,它通过填充一个圆圈来显示进度,但现在我正在寻找一种方法来擦除我在这个白色圆圈之外的视图区域:
在这里,我的代码:
我很确定我可以用PorterDuff做到这一点,但我不知道怎么做。
android-studio - 如何在每次点击时更改可绘制对象的颜色?
我有一个背景设置为可绘制的按钮,以在其上获得圆角。我试图让按钮在每次点击时更改颜色,而不必为我想使用的每种颜色制作可绘制的。
目前我正在尝试使用 PorterDuff 在可绘制对象的白色背景上应用颜色过滤器。
当我加载应用程序时,按钮保持白色。关于我做错了什么或更好的解决方法的任何想法?