2012-04-16 126 views
1

我通過以下功能調整圖像顏色。問題是,如果我需要一個colorFilter值切換爲它不工作,但如果我進入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 **值'? – Engineer 2012-04-16 14:12:52

+0

我的意思是:'colorFilter.hue/colorFilter.saturation/colorFilter.brightness/colorFilter.contrast' – Anky 2012-04-16 14:59:52

回答

2

我通過添加一個參數adjustColors()並調用它兩次,我看到了同樣的問題。我認爲這只是一個忽略零值的錯誤。

這不是太大的更好的解決辦法,但如果你只需要創建一個新的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,如果它真的改變的東西... 而你保持一個很好的清潔陣列... ;-)