【问题标题】:algorithm for gradient..how does it even work梯度算法..它是如何工作的
【发布时间】:2012-01-13 07:45:02
【问题描述】:

如果给我颜色 A 和颜色 B,如何在画布上生成渐变,然后可以将其转换为位图。

这样

公共位图 makeGradient(Color from, Color to){}

真的有用吗?

我希望这不是太模糊。感谢您的时间和精力。

附言。 stackoverflow 上有一个问题可以回答这个问题,但我仍然很困惑:(

这里是:Generating gradients programmatically?

【问题讨论】:

标签: java colors bitmap gradient


【解决方案1】:

创建径向渐变的一种方法可能是定义焦点以及渐变的范围,当您生成图像时,您将计算当前像素与焦点之间的距离,然后将其除以按渐变范围并将结果剪裁为 1。然后使用您链接的问题中的公式。

类似这样的伪代码:

double d = distance(currentPixel, focusPoint); //I'll leave the implementation for you
double factor = Math.max(1.0, d/extent);

int red = (int) (firstCol.getRed() * factor + secondCol.getRed() * (1.0 - factor) );
int green= (int) firstCol.getGreen() * factor + secondCol.getGreen()* (1.0 - factor) );
int blue = (int) (firstCol.getBlue() * factor + secondCol.getBlue()* (1.0 - factor) );

这意味着像素离焦点越远,firstCol 对它的贡献就越大(超出渐变范围的像素将仅使用firstCol,因为factor 应该是1.0对于那些)。

【讨论】:

  • 我不知道我是怎么画这个的。因为焦点会导致正常的径向渐变相当偏斜,所以我无法设置剪辑/矩形来绘制它。
  • @bluejamesbond 我可能误解了你,但焦点不是渐变的中心。你不画一个通常是矩形的图像吗?在这些情况下,您只需遍历像素并计算每个像素的渐变颜色。如果我误解了你,请澄清(也许通过发布你想要实现的图像)。
  • 我的意思是这样的stackoverflow.com/questions/8651810/…(我之前在android论坛上发布过这个但没有人回答)
  • @bluejamesbond 看起来您想创建一个正常的径向渐变,然后将其投影到另一个平面上,该平面的法线将是向量 (dx,dy,1) 的规范化版本,其中 dx 是两者之间的距离x 轴上的梯度中心和焦点,dy 是 y 轴上的距离。我必须查找平面投影,所以你也可以这样做。您很可能会找到 3D 算法,但由于您在 2D 中工作,您可能能够简化方程(就像我简化了法线向量一样,因为在 2D 情况下 z 为 1)。
  • 我会再调查一下,如果我有任何疑问,请给您留言。
猜你喜欢
  • 1970-01-01
  • 2014-10-26
  • 2020-10-08
  • 2015-11-27
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多