2012-04-16 9 views
1

以下の機能で画像の色を調整しています。問題は、私はにカラーフィルター値を切り替える必要がある場合、それは働いていないということですが、私は0.1の代わりに、を入力すると、それが動作します。 回避策なしで動作させるにはどうすればいいですか?AS3 - 画像の色を調整する

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]; 
} 
+0

「** colorFilter ** value」はどういう意味ですか? – Engineer

+0

私はこれを意味します: 'colorFilter.hue/colorFilter.saturation/colorFilter.brightness/colorFilter.contrast' – Anky

答えて

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]; 
} 
0

は参照のための私の回避策です: は、ちょうどその時論理和割り当てを使用それぞれのプロパティを設定します。値が0の場合はfalseと0.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を毎回再作成を回避する方法を、場合には、それは本当に何かを変更... そして、素敵なクリーンな配列を保つ... ;-)