我在bitmapData上绘制东西,我需要在绘制时将每个像素连续淡入0x808080(它用于DisplacementMapFilter)...
我认为这说明了我的问题:
http://www.ventdaval.com/lab/grey.swf
我尝试的更简单的方法是在其上绘制一个半透明的灰色框,但它永远不会达到单一颜色(即0x808081永远不会转为0x808080)...同样的事情发生在ColorMatrixFilter尝试逐渐降低饱和度和/或对比度。 (上面的示例是应用每帧-10对比度的滤镜。)
我现在正在尝试使用paletteMap,我感觉这可能是要走的路,但我无法得到它...任何想法?
答案 0 :(得分:1)
你现在可以尝试淡化它,而不是现在淡出它,所以颜色会变为0x808080,你只需要做一些计算。
是的,您可以使用paletteMap执行此操作。 第三种方法是为它编写PixelBender着色器。 您也可以使用普通的淡入淡出,并在几帧内完成一次paletteMap或PixelBender,以加快这一切。
答案 1 :(得分:1)
我认为最简单的方法是使用两个连续的彩色滤镜。那就是:
var n:Number = 0.9;
var off:Number = 0x80;
var filter:ColorMatrixFilter = new ColorMatrixFilter( [
1, 0, 0, 0, -off,
0, 1, 0, 0, -off,
0, 0, 1, 0, -off,
0, 0, 0, 1, -off ] );
var filter2:ColorMatrixFilter = new ColorMatrixFilter( [
n, 0, 0, 0, off,
0, n, 0, 0, off,
0, 0, n, 0, off,
0, 0, 0, n, off ] );
function onFrame( e:Event ) {
myBMD.applyFilter( myBMD, myBMD.rect, new Point(), filter );
myBMD.applyFilter( myBMD, myBMD.rect, new Point(), filter2 );
}
第一个滤镜将每个通道值向下偏移128 - 将基于灰色的图像转换为基于黑色的图像。第二个滤波器将每个通道值乘以调制器(在我的示例中为0.9),然后将值向上偏移128.
答案 2 :(得分:1)
我通过每帧用0xFF808080填充纹理来解决这个问题,然后将我的动态内容绘制到第二个透明位图,使用较低的alpha乘数(比如0.98)对其进行colortransform,然后将该位图复制到mergealpha on的主位图。是一种享受:
public function update():void
{
lock();
fillRect(rect, 0xFF808080);
drawTarget.lock();
drawTarget.colorTransform(rect, fadeTransform);
drawTarget.applyFilter(drawTarget, rect, pt, blurFilter);
drawTarget.unlock();
copyPixels(drawTarget, rect, pt, null, null, true);
unlock();
}