AS3 - 调整图像颜色

时间:2012-04-16 10:26:08

标签: actionscript-3 colors adjustment

我正在通过以下功能调整图像颜色。问题是,如果我需要将 colorFilter 值切换为 0 ,它将无效,但如果我输入 0.1 而不是 0 < / strong>它有效。 如何在没有这种解决方法的情况下使其工作?

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

2 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分: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,以防它真的改变了什么...... 并且你保持一个漂亮干净的阵列...; - )