问题标签 [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.

0 投票
0 回答
959 浏览

android - Android PorterDuff.Mode.DST_IN 结合 Bitmap.Config.ALPHA_8

我正在玩位图蒙版,在尝试使用Paint绘制ALPHA_8位图蒙版时偶尔会发现一个有趣的问题。PorterDuff.Mode.DST_IN它只是不起作用,至少在 Android 6.x 和 5.x 上是这样。
这是我的示例可绘制代码:

mMaskBitmapARGB_8888配置它工作得很好。但是当我使用ALPHA_8它时不会。在这种情况下,图片根本没有被掩盖。

这是我在 Activity 中加载资源的方式:

请注意.extractAlpha()哪个给了我ALPHA_8位图。

以下是我使用 Drawable 的方法:

更有趣的是,当我尝试另一种方法时,先绘制蒙版,然后使用SRC_INPaint 绘制图片 - 它再次正常工作,即使使用ALPHA_8蒙版:

...

这是我在GitHub 上试验的整个项目的链接。它包含非工作和工作解决方案,请随意使用。

任何人都知道为什么组合DST_INALPHA_8不按预期工作?

0 投票
1 回答
93 浏览

android - 由交叉点制成的透明度

让我听到这个。我有一个背景位图,我想在上面覆盖另一个位图,上面有透明的切口。如果切口是基本形状,我没有问题,但我需要切口是两个圆的交点(有点像叶子形状)。我尝试制作第三个位图来生成剪切模板,但我什至无法获得剪切的清晰表示,更不用说让它作为剪切模板工作了。

任何人都知道如何做这样的事情?这是我的(简化的)尝试:

这是我得到的图像:

在此处输入图像描述

我想要得到的外部部分也是红洋红色;只有中间的眼睛形状应该是黄绿色。

0 投票
1 回答
713 浏览

android - 使用掩码显示具有 2 种不同颜色的 TextView

我正在尝试实现与此类似的效果:

在此处输入图像描述

我现在在做什么:

这导致:

在此处输入图像描述

关闭,这里的问题是设置pMask.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));.

如果我注释掉该行,我会得到以下结果:

在此处输入图像描述

再次关闭,但现在线性渐变完全覆盖了文本。有人可以帮我解决我在这里缺少的东西。有没有更好的方法来达到这个效果?

0 投票
1 回答
520 浏览

android - PorterDuffXfermode 画布与几个相交的矩形

我正在尝试在画布上绘制 3 个矩形。
第一个是绿色的,在后面。第二个是红色的,在绿色的上方。第三是遍历它们,它应该“切穿”前两个矩形。像这样的东西:

在此处输入图像描述

我知道我应该做这样的事情:

但是要使用什么 PorterDuffXfermode,以及如何只剪辑一个矩形而不是在所有矩形上打一个洞并得到这个:

在此处输入图像描述

PS 我不能制作不同的位图然后绘制它们,因为它会每隔 1 或 2 秒重新绘制一次。

0 投票
1 回答
635 浏览

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

0 投票
1 回答
644 浏览

android - Canvas Android 中的重叠路径

我正在尝试绘制一个由许多路径组成的形状:-

像这样的多条线路径

和像这样的蓝线路径

pathColorList 是路径及其油漆颜色的列表。

  • 问题是我需要始终在灰色路径之上的蓝色路径。即使 灰色路径重叠蓝色路径;重叠区域必须是蓝色而不是灰色,所以看起来蓝色带仍然在灰色带的顶部。

  • 我尝试过的:-

    • 一种方法是绘制所有灰色路径,然后绘制所有蓝色路径。但是我试图绘制的形状有多个灰色和蓝色重叠,需要按路径动画的顺序绘制,所以我不能这样做。

    • 我尝试PorterDuffXfermode在灰色路径上使用,但 PorterDuffXfermode 似乎都不起作用

      for (对 pathColor : pathColorList) {

      /li>

我无法弄清楚我做错了什么。任何帮助将不胜感激。

0 投票
1 回答
1318 浏览

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变得太暗,XORSCREEN苍白。

如何正确制作此渐变?我应该使用哪种 PorterDuff 模式?


我将光标绘制为与所选颜色相同的颜色,以测试渐变是否正确绘制。(选定的颜色是用坐标计算的)对于除值之外的所有枢轴值,光标很难看到/不可见。

单纯疱疹病毒

看起来白色渐变变得透明得太快了。为了做到这一点,我露了两个线性梯度,然后将它们与ComposeShaderPorterDuffSRC_OVER模式合并。然后我绘制一个黑色矩形,其透明度对应于值(亮度)值。如果您需要,我可以发布代码。

0 投票
1 回答
251 浏览

android - 使用画布清除特定圆圈外的区域

我有一个自定义视图,它通过填充一个圆圈来显示进度,但现在我正在寻找一种方法来擦除我在这个白色圆圈之外的视图区域:

在此处输入图像描述

在这里,我的代码:

我很确定我可以用PorterDuff做到这一点,但我不知道怎么做。

0 投票
2 回答
433 浏览

android-studio - 如何在每次点击时更改可绘制对象的颜色?

我有一个背景设置为可绘制的按钮,以在其上获得圆角。我试图让按钮在每次点击时更改颜色,而不必为我想使用的每种颜色制作可绘制的。

目前我正在尝试使用 PorterDuff 在可绘制对象的白色背景上应用颜色过滤器。

当我加载应用程序时,按钮保持白色。关于我做错了什么或更好的解决方法的任何想法?

0 投票
0 回答
66 浏览

android - 颜色混合和 porterduffxfermode 效果

这个结果是 -574974084

我使用以下两种颜色进行混合,但为什么我得到一个负数?另外,我怎样才能通过在android中使用paint或porterduffxfermode来制作如下图所示的明亮口红效果?请给我一些建议。非常感谢。

在此处输入图像描述