如何将RGBA颜色元组(例如96,96,96,202)转换为相应的RGB颜色元组?
编辑:
我想要的是在白色背景上获得与RGBA元组最相似的RGB值.
RGB颜色的常见混合与绘画的混合颜色非常不同,它是混合光而不是混合颜料.
例如:
Blue (0,0,255) + Yellow (255,255,0) = Grey (128,128,128)
Run Code Online (Sandbox Code Playgroud)
(它应该是蓝色+黄色=绿色)
是否有任何已知的混色算法,就像混合真实颜色一样?
我已经尝试过以下内容:
将两种颜色转换为HSV并混合色调(乘以从饱和度计算的系数),以及饱和度和值通道的简单平均值.然后我从两种颜色计算平均亮度,并调整结果颜色以匹配此亮度.这很有效,但色调混合有时是错误的,例如:
Red (Hue 0°) + Blue (Hue 240°) = Green (Hue 120°)
Run Code Online (Sandbox Code Playgroud)
我发现有时我需要将色调值移动360°(当色调之间的差异大于180°时).
Red (Hue 360°) + Blue (Hue 240°) = Magenta/fuchsia (Hue 300°)
Run Code Online (Sandbox Code Playgroud)
但这种转变也不是很好,例如:
Cyan (Hue 179°) + Red (Hue 0°) = Hue 89.5°
Cyan (Hue 181°) + Red (Hue 0°) --> shifting is performed (the difference is greater than 180°)
Cyan (Hue 181°) + Red (Hue 360°) = Hue 270.5°
Run Code Online (Sandbox Code Playgroud)
(色调179 +红色)和(色调181 +红色)产生两种完全不同的颜色. …
来自平面设计背景,我知道如何作弊创造加色的效果.在这里的另一篇文章中提出了相同的基本解决方案.
上面的帖子是指透明.png文件,但概念是相同的.我想创建的基本效果就像这里所描绘的那样.
我喜欢在SVG中这样做,以便它可以扩展,所以当我谈论一个给定的主题时(让我们只说主题是'绿色')我可以放大图形的那一部分,重叠的区域仍然会正确显示.
这些帖子似乎非常接近:
但是上面没有一个与SVG有关,所以让我给它一个旋转.
我正在尝试组合两种 RGBA 颜色,以元组形式给出,例如 (0, 0, 0, 128) 和 (255, 255, 255, 128)。我已经发现这非常有帮助,但是我当前的代码(Python)
def get_color(colorRGBA1, colorRGBA2):
alpha = 255 - (255 - colorRGBA1[3]) * (255 - colorRGBA2[3])
red = (colorRGBA1[0] * (255 - colorRGBA2[3]) + colorRGBA2[0] * colorRGBA2[3]) / 255
green = (colorRGBA1[1] * (255 - colorRGBA2[3]) + colorRGBA2[1] * colorRGBA2[3]) / 255
blue = (colorRGBA1[2] * (255 - colorRGBA2[3]) + colorRGBA2[2] * colorRGBA2[3]) / 255
return (int(red), int(green), int(blue), int(alpha))
Run Code Online (Sandbox Code Playgroud)
以某种方式返回一些奇怪的数字(如 -15874)作为 alpha。其他一切都工作正常,但我不知道如何获取新颜色的 alpha 值。
两种颜色的 alpha 值范围为 …
浅色和油漆之间存在不匹配:虽然物理学家会说三原色是红色,绿色和蓝色,但画家会将红色,蓝色和黄色作为原色.事实上,当用水彩画画时,你不能混合红色,绿色和蓝色的黄色,而不是混合橙色,你只会变成棕色.
这是我正在尝试做的事情:从两种给定的RGB颜色我想计算组合颜色的RGB代码,我希望颜色像水彩一样混合在纸上.据我所知,计算通常如下所示:
但是,当混合蓝色和黄色时,结果是灰色的:
在纸上你会期望变绿(#008800)并且在混合颜色时永远不会变灰.
所以我的问题是,我怎么能用绿色交换绿色作为原色,然后我怎样才能计算出符合油漆定律而不是浅色定律的混合色?
我有两种颜色的十六进制形式,#000000和#ffffff.我想以百分比的方式将第一种颜色逼近第二种颜色.就像是:
var percent=0.50;
var color1='#000000';
var color2='#ffffff';
var newcolor=approximateColor1ToColor2ByPercent(color1,color2,percent);
//newcolor should be a gray like #808080
Run Code Online (Sandbox Code Playgroud)
这该怎么做?
简而言之:我matplotlib用来绘制散点图和曲面。我遇到了一个问题,因此表面总是绘制在点的顶部而不是应该的后面。
我想通过预处理点的颜色来解决这个问题,这样当被表面覆盖时,我会获得“原始颜色”,这样表面就会出现在点的后面。我color使用HEX值指定点。
我遇到的曲面和点的问题类似于这里描述的问题。
以下是详细信息:
我在 Matplotlib 中有一个蓝色和红色点的 3D 散点图:
self.subplot_3d = self.subplot.scatter(x_red, y_red, z_red, s = 150, c = RED, depthshade = False, lw = 0, alpha = 1)
self.subplot_3d = self.subplot.scatter(x_blue, y_blue, z_blue, s = 150, c = BLUE, depthshade = False, lw = 0, alpha = 1)
Run Code Online (Sandbox Code Playgroud)
点是线性可分的 - 存在一个分离平面,将红点和蓝点分开。我绘制平原使用
self.plane = self.subplot.plot_surface(X, Y, Z, antialiased = True, color = RED_BACKGROUND, alpha = 0.5)
Run Code Online (Sandbox Code Playgroud)
我想画两个图:在第一个中,没有单独绘制的平面 - 只有红色和蓝色点(左)。在第二个中有一个分离平面(右)。
绘制分离平面后,我无法强制将平面绘制在红点和蓝点之间(正如平面方程和点的位置所预期的那样)平面总是出现在所有点的顶部。
我正在考虑的解决方案如下: …
我环顾了不同的来源:
但是,这些答案都不是我正在寻找的。
我想要做的是获得 2 种颜色范围内的随机颜色,例如紫色和粉红色。对于紫色#6A0DAD和粉红色#FFC0CB,我想在这两种颜色的范围内抓取一种颜色,但要随机一种。所以我会得到例如#D982B5,这是品红色粉红色。
到目前为止,除了制作随机数之外,我不知道从哪里开始。
colors ×6
python ×2
algorithm ×1
alpha ×1
blending ×1
color-scheme ×1
color-space ×1
css ×1
graphics ×1
image ×1
java ×1
javascript ×1
matplotlib ×1
rgb ×1
rgba ×1
svg ×1
svg-filters ×1
transparency ×1