AS3 - 调整图像颜色

Posted

技术标签:

【中文标题】AS3 - 调整图像颜色【英文标题】:AS3 - Adjust image colors 【发布时间】:2012-04-27 16:20:12 【问题描述】:

我正在通过下面的函数调整图像颜色。问题是,如果我需要将 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];

【问题讨论】:

colorFilter 值”是什么意思? 我的意思是:colorFilter.hue / colorFilter.saturation / colorFilter.brightness / colorFilter.contrast 【参考方案1】:

我通过向 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];

【讨论】:

【参考方案2】:

这是我的解决方法供参考: 设置每个属性时只需使用逻辑 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,以防它真的改变了一些东西...... 而且你保持了一个干净整洁的数组...... ;-)

【讨论】:

以上是关于AS3 - 调整图像颜色的主要内容,如果未能解决你的问题,请参考以下文章

AS3得到图像的平均颜色

单击时尝试转换按钮颜色 flash as3

调整图像大小后检测公差颜色

调整图像大小并用颜色填充比例间隙

ps怎么换颜色

无法调整 UIPopupController 显示图像