1

我正在通过下面的功能调整图像颜色。问题是,如果我需要将colorFilter值切换为0,它不起作用,但如果我输入0.1而不是0,它会起作用。没有这种解决方法如何使它工作?

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() 添加一个参数并调用它两次来测试它,我看到了同样的问题。我认为这只是一个忽略零值的错误。

这不是一个更好的解决方法,但如果您每次都创建一个新的 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 回答