1

以下の関数で画像の色を調整しています。問題は、colorFilter値を0に切り替える必要がある場合は機能しないが、 0の代わりに0.1を入力すると機能することです。その回避策なしでそれを機能させる方法は?

import fl.motion.AdjustColor;
import flash.filters.ColorMatrixFilter;

var colorFilter:AdjustColor = new AdjustColor();
var mColorMatrix:ColorMatrixFilter;
var mMatrix:Array = [];
var MC:MovieClip = new MovieClip();

function adjustColors():void
{

    colorFilter.hue = 50;
    colorFilter.saturation = 50;
    colorFilter.brightness = 50;
    colorFilter.contrast = 12;

    mMatrix = colorFilter.CalculateFinalFlatArray();
    mColorMatrix = new ColorMatrixFilter(mMatrix);

    MC.filters = [mColorMatrix];
}
4

2 に答える 2

2

AdjustColors() に引数を追加して 2 回呼び出すことでこれをテストしましたが、同じ問題が発生しました。ゼロ値を無視するのは単なるバグだと思います。

これはあまり良い回避策ではありませんが、毎回新しい AdjustColor を作成するだけで、正しく動作するはずです:

import fl.motion.AdjustColor;
import flash.filters.ColorMatrixFilter;

var colorFilter:AdjustColor = new AdjustColor();
var mColorMatrix:ColorMatrixFilter;
var mMatrix:Array = [];
var MC:MovieClip = new MovieClip();

function adjustColors():void
{

    colorFilter = new AdjustColor();

    colorFilter.hue = 50;
    colorFilter.saturation = 50;
    colorFilter.brightness = 50;
    colorFilter.contrast = 12;

    mMatrix = colorFilter.CalculateFinalFlatArray();
    mColorMatrix = new ColorMatrixFilter(mMatrix);

    MC.filters = [mColorMatrix];
}
于 2013-01-09T14:22:43.430 に答える
0

参照用の私の回避策は次のとおりです。各プロパティを設定するときに、論理 OR 割り当てを使用してください。そのようにして、値が 0 の場合は false と評価され、代わりに .1 が割り当てられます。

var colorMat:ColorMatrixFilter = new ColorMatrixFilter();
var colorAdjust:AdjustColor = new AdjustColor();

const colorsAdj:Array = 
[
    // BRIGHTNESS, CONTRAST, SATURATION, HUE
    [-20,0,20,-50],
    [0,0,0,0],
    [0,0,0,17]
];

function setColorMat(colorID:int):void
{
    colorAdjust.brightness = colorsAdj[colorID][0] ||= .1;
    colorAdjust.contrast = colorsAdj[colorID][1] ||= .1;
    colorAdjust.saturation = colorsAdj[colorID][2] ||= .1;
    colorAdjust.hue = colorsAdj[colorID][3] ||= .1;
    colorMat.matrix = colorAdjust.CalculateFinalFlatArray();
}

そうすれば、実際に何かが変更された場合に備えて、毎回新しい ColorMatrixFilter を再作成する必要がなくなります...そして、きれいな配列を維持できます... ;-)

于 2013-10-15T01:14:34.963 に答える