T 图像中的灰度值表示时间偏移。您的擦除效果将在每个像素的基础上基本上按如下方式工作:
for (timeIndex from 0 to 255)
{
for (each pixel)
{
if (timeIndex < T.valueOf[pixel])
{
compositeImage.colorOf[pixel] = A.colorOf[pixel];
}
else
{
compositeImage.colorOf[pixel] = B.colorOf[pixel];
}
}
}
为了说明,想象一下在 的几个值下会发生什么timeIndex
:
timeIndex == 0
(0%):这是过渡的开始。此时,合成图像中的大部分像素将是图像 A 的像素,除了 T 中对应的像素是完全黑色的。在这些情况下,合成图像像素将是图像 B 的像素。
timeIndex == 63
(25%):此时,图像 B 中的更多像素已进入合成图像。T 值小于 25% 白色的每个像素将从图像 B 中取出,其余的仍然是图像 A。
timeIndex == 255
(100%):此时,T中的每个像素都会否定条件,因此合成图像中的所有像素都将是图像B的像素。
为了“平滑”过渡,您可以执行以下操作:
for (timeIndex from 0 to (255 + fadeTime))
{
for (each pixel)
{
blendingRatio = edgeFunction(timeIndex, T.valueOf[pixel], fadeTime);
compositeImage.colorOf[pixel] =
(1.0 - blendingRatio) * A.colorOf[pixel] +
blendingRatio * B.colorOf[pixel];
}
}
的选择edgeFunction
取决于你。这产生了从 A 到 B 的线性过渡:
float edgeFunction(value, threshold, duration)
{
if (value < threshold) { return 0.0; }
if (value >= (threshold + duration)) { return 1.0; }
// simple linear transition:
return (value - threshold)/duration;
}