0

私はbitmapDataに描画しているので、描画しながらすべてのピクセルを0x808080に継続的にフェードする必要があります(DisplacementMapFilterの場合)...これは私の問題を示していると思います:
http ://www.ventdaval.com/lab/grey .swf

私が試したより簡単なアプローチは、その上に半透明の灰色のボックスを描画することでしたが、単一の色に達することはありません(つまり、0x808081が0x808080に変わることはありません)...同じ種類のことが、ColorMatrixFilterが徐々に減少しようとするときに起こります。飽和および/またはコントラスト。(上記の例は、フレームごとに-10のコントラストを持つフィルターを適用しています)。

私は今paletMapを試しています、そしてこれが進むべき道であるかもしれないと感じています、しかし私はそれを得ることができませんでした...何かアイデアはありますか?

4

3 に答える 3

1

これを行う最も簡単な方法は、2 つの連続したカラー フィルターを使用することだと思います。あれは:

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 だけ下方にオフセットし、グレーベースの画像を黒ベースの画像に変えます。2 番目のフィルターは、各チャンネルの値に変調器 (この例では 0.9) を乗算し、値を 128 だけオフセットします。

于 2010-04-04T07:59:57.823 に答える
1

フレームごとにテクスチャを 0xFF808080 で塗りつぶし、動的なものを 2 番目の透明なビットマップに描画し、より低いアルファ乗数 (0.98 など) で colortransform を実行し、そのビットマップをメインのビットマップにコピーピクセル化することで、これを解決しました。マージアルファをオンにします。御馳走を働きます:

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();
        }
于 2013-01-24T23:03:02.970 に答える
1

現在フェードしているよりも少しだけフェードを試みることができるので、色は 0x808080 になります。計算を行うだけで済みます。

はい、paletteMap でこれを行うことができます。3 つ目の方法は、PixelBender シェーダーを作成することです。通常のフェードを使用して、数フレームに 1 回、paletteMap または PixelBender を実行して、これらすべてを高速化することもできます。

于 2009-11-27T10:00:42.817 に答える